Дизайн: Когда путь между объектами области и объектами службы не свободен

= [1,2,3,4,5,7,7,8,8,9,9,3,45]

определение, уникальное (l):

ids={}
for item in l:
    if not ids.has_key(item):
        ids[item]=item
return  ids.keys()

печатают

, печатают уникальный (a)

, элементы Вставки----------------------------

возьмут тету (n) получение, если элемент выйдет или не займет постоянное время, тестируя все объекты, то возьмет также тету (n), таким образом, мы видим, что это решение возьмет тету (n), Принимают во внимание что словарь в Python, реализованном хэш-таблицей

7
задан Arjan Tijms 23 July 2013 в 21:12
поделиться

3 ответа

почтовый ящик - это почтовый ящик ...

... но автоответчик - это почтовый ящик с некоторыми правилами, прикрепленными к нему; возможно, это не подкласс почтового ящика, а агент MailAgent, который управляет одним или несколькими почтовыми ящиками и набором правил.

Предостережение: у меня ограниченный опыт работы с DDD, но этот пример кажется мне основанным на ложном предположении, например, поведение применения правил принадлежит почтовому ящику. Я думаю, что применение правил к сообщениям не зависит от почтового ящика, то есть почтовый ящик получателя может быть только одним из критериев, используемых правилами фильтрации / маршрутизации. Так что в этом случае для меня было бы больше смысла использовать службы ApplyRules (сообщение) или ApplyRules (почтовый ящик, сообщение).

4
ответ дан 6 December 2019 в 23:10
поделиться

Вы кое-что упускаете: вполне разумно, чтобы объект Mailbox зависел от интерфейса, предоставляемого во время выполнения. «Не зависеть от служб времени выполнения» правильно, поскольку у вас не должно быть зависимостей во время компиляции.

Поскольку единственной зависимостью является интерфейс, вы можете использовать контейнер IoC, например StructureMap , Unity и т. Д., Чтобы передать вашему объекту тестовый экземпляр, а не экземпляр среды выполнения.

В конце ваш код для AutoRespondingMailbox может выглядеть следующим образом:

public class AutoRespondingMailbox {
    private IEmailSender _sender;

    public AutoRespondingMailbox(IEmailSender sender){
        _sender = sender;
    }

    public void addMessage(Message message){
        String response = getAutoResponse();
        _sender.Send(response);
}

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

6
ответ дан 6 December 2019 в 23:10
поделиться

Один из вариантов (и, возможно, не лучший) - обернуть объект внутри объекта «исполнителя». Объект-исполнитель будет содержать информацию об уровне обслуживания, а объект внутренних данных будет содержать информацию о домене. Затем вы можете использовать фабрику для создания этих объектов, тем самым ограничивая область применения методов "instanceof" или подобных элементов, и тогда различные объекты будут иметь какой-то общий интерфейс для использования, чтобы они могли выполнять свои объекты данных. Это своего рода смесь между шаблоном команды - у вас есть объект команды в качестве исполнителя - и шаблоном состояния - состояние - это текущее состояние объекта данных - хотя ни один из них не является точным соответствием.

0
ответ дан 6 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: