Проектирование для капсулирования - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть бизнес-объект Office, в котором есть экземпляр officeId.

С точки зрения бизнеса, идентификаторы office могут иметь 500 различных значений.

officeId = 1 означает, что он расположен в Лос-Анджелесе.officeId = 2 означает, что он находится в SFO и т. д.

Я хочу проверить, подходит ли office для LA или SFO

У меня могут быть такие методы, как isOfficeInLosAngeles, isOfficeInSfo и т. д.

Я вижу в этом способ инкапсуляции данных и поведения в Office.

Но меня беспокоит то, что мне придется добавить 500 методов *, чтобы выяснить офис.

ЕстьЕсть ли способ извлечь эти * методы где-нибудь, чтобы упростить дизайн и сохранить инкапсуляцию?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Создайте перечисление с 500 значениями, по одному для каждого города. Затем предоставьте метод getCity, который возвращает город в качестве одного из значений перечисления. Тогда ваша проверка (язык Java) становится

City c = office.getCity();
if (c == City.LA) {
    // Do something
} else if (c == City.SFO) {
    // Do something
}
0 голосов
/ 02 февраля 2012

Инкапсуляция - это правильно ... Подумайте об этом так, где в вашем коде должно быть заключено "знание", что "1 означает LA, 2 означает SFO ..."? Если ваш офисный объект является единственным объектом, который должен знать, что означает идентификатор, то вы можете предоставить метод getOfficeLocation, который возвращает полезное представление, скажем String, которое могут использовать вызывающие объекты Office, зная этот интерфейс не изменится, даже если вы добавите новые местоположения в более позднюю версию объекта Office.

...