メソッドに 30 を超えるパラメーターが指定されている素晴らしいコードを見つけました (カウントを失いました)。実装には、 if/then/elseおよびswitchブロックを含む 500 行以上が含まれています。
これをクリーンな方法でリファクタリングするにはどうすればよいでしょうか? これについてあなたのアドバイスは何ですか?
多くの実装がアプリケーション全体にあり、すべてがこれらのパラメーターをプッシュします。
問題の方法:
public static User findUser (
String userCode, String lastName, String firstName,
String alternativeLastName, String sex, int day, int month, int year,
String locationParameter, String locationInfo,
Id groupId, Id organizationId, Id orderId,
Id orderGroupId, Id orderOrganizationId,
List<Id> groupIds, List<Id> organizationIds,
List<Id> orderIds, List<Id> orderGroupIds,
List<Id> orderOrganizationIds,
String timeRange, Long daysAgo,
Date dateFrom, Date dateUntil,
CodingMap codingMap, List<String> languageList, String visitType,
Account account, List<Group> accountGroups,
Organization accountOrganization, Profile profile,
AccessProfile accessProfile, Locale locale, int maxResults,
long newTimeRange, long minimumTimeRange,
boolean hideUserWithoutName, boolean withOrderInfo, boolean withVisitInfo,
boolean orderEntryAvailable,
boolean hideDiscontinuedResults, boolean checkPatientAccessRights, boolean searchForCopies,
boolean inOrderEntry, boolean allPatientCodes,
boolean addPatientCharacteristics, boolean showSpeciesColumn,
boolean patientDefinedWithPrivacyLevel,
boolean excludePatientsWithoutCodeInSelectedCodingSystem
) throws CompanyException {
...
}
次のようにあちこちで使用されます。
User.findUser(member.getCode(), context.lastName, context.firstName,
context.alternativeLastName, context.sex,
context.birthDate.getDay(), context.birthDate.getMonth(),
context.birthDate.getYear(),
context.locationParameter, context.locationInfo,
null, null, null, null, null, null, null, null, null, null,
session.timeRange(), session.daysAgo(), session.dateFrom(),
session.dateUntil(),
order.codingMap(), order.languageList(), member.visitType(),
null, null, null, null, null, locale, 25, 1000L,200L,
session.point.booleanValue(), session.infobooleanValue(), false,
true, true, true, true, true, true, true, false, false, false);