Вопрос о дизайне: набирает ли телефон PhoneNumber или PhoneNumber набирает себя на телефоне? - PullRequest
8 голосов
/ 16 сентября 2008

Это переиздано из того, что я выложил на DDD Yahoo! группа.

При прочих равных вы пишете phone.dial (phoneNumber) или phoneNumber.dialOn (phone)? Имейте в виду возможные будущие требования (номера счетов в дополнение к номерам телефонов, калькуляторы в дополнение к телефонам).

Этот выбор иллюстрирует, как идиомы Информационного эксперта, Принципа единой ответственности и «Не спрашивай» противоречат друг другу.

phoneNumber.dialOn (phone) поддерживает информационный эксперт и «Не спрашивай», а phone.dial (phoneNumber) поддерживает принцип единой ответственности.

Если вы знакомы с работой Кена Пью в Prefactoring, то это Загадка электронной таблицы ; Вы добавляете строки или столбцы?

Ответы [ 13 ]

0 голосов
/ 16 сентября 2008

phone.dial () +1.

Что такое вариант состояния или поведения PhoneNumber? Единственное, что приходит на ум, - это «правила набора номера» (наберите код страны, если он снаружи, наберите «9» для выхода на внешнюю линию и т. Д.). Этот контекст, кажется, хорошо подходит для телефона.

Если ваша объектная модель не требует дисперсии - число - это просто последовательность цифр, «циферблат» - это просто foreach (цифра в телефонном номере) {нажмите (цифра); } Я с Робом Конери: Мех.

0 голосов
/ 16 сентября 2008

Я не уверен, как это связано с загадкой электронной таблицы. Ожидаете ли вы в будущем использовать телефоны для набора номеров счетов? Использовать номера телефонов на калькуляторах? Ваш пример "готовности к будущим требованиям" не очень хорош ...

Плюс, вы используете глагол "циферблат". Конечно, я мог представить себе «набор» номера счета на телефоне. (Однако это большой отрезок.) Но если этот номер телефона будет использоваться на калькуляторе, вы бы назвали действие «набор номера»? Если имя функции изменяется в зависимости от типа передаваемого параметра, возникает ошибка проектирования.

В типичном дизайне ОО объекты получают отправленные сообщения, содержащие данные, а не наоборот.

0 голосов
/ 16 сентября 2008

Не для того, чтобы быть отрицательным здесь, но такие вопросы очень академичны. Это полностью зависит от приложения. Я думаю, что очень хорошие причины делать это так или иначе, и я видел слишком много хороших программистов увязнуть в такого рода спорных деталей дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...