Образец голых объектов против луковой архитектуры
Я больше разбираюсь в доменно-ориентированном дизайне и немного растерялся из-за того, как Naked Objects Pattern и Onion Architecture могут соотноситься друг с другом?
В отдельности, как они связаны с DDD, вполне понятно, но возможно ли также связать их друг с другом?
1 ответ
(Заявление о заинтересованности: я был автором архитектурного шаблона Naked Objects и управляю платформой Naked Objects - NOF.)
Я не признаю, что хорошо знаю архитектуру Onion, но на одном уровне идеи кажутся совместимыми с Naked Objects; на другом уровне он сравнивает яблоки с апельсинами.
Onion Architecture - это набор принципов проектирования, которые можно применять при создании архитектуры с нуля с использованием различных технологий и шаблонов. Теоретически, как и голые объекты; на практике вы бы приняли шаблон Naked Objects, только построив свои системы с использованием интегрированной среды, которая его реализовала - это слишком похоже на тяжелую работу, чтобы написать свою собственную. Naked Objects Framework - самая большая и самая чистая такая среда, но не единственная.
Таким образом, значимое сравнение не между принципами Лука и принципами NO, а между первым и конкретным применением принципов NO. Я, очевидно, буду использовать NOF в качестве примера.
NOF очень строго реализует и обеспечивает соблюдение принципов, из которых вытекает Onion: очень сильное разделение интересов. Модель предметной области практически полностью независима от инфраструктуры: единственная точка контакта находится через один очень легкий интерфейс (IDomainObjectContainer), который определяет сервис, реализация которого автоматически внедряется в любой объект или сервис домена, который его хочет.,
Даже сильнее, чем архитектура Onion, ваш пользовательский интерфейс не зависит от модели предметной области - потому что он универсальный. (Если вы не начнете настраивать пользовательский интерфейс, в этом случае вы рискуете потерять преимущества шаблона НЕТ).
Принципы Onion могут быть далее применены в рамках модели предметной области - гарантируя, что все доменные службы, например, определяются и используются только интерфейсами. Я видел, как некоторые люди пытаются, чтобы все взаимодействия между объектами домена проходили только через интерфейсы, но я никогда не видел, чтобы это работало в любом масштабе и не вижу в этом особой ценности. Возможно, вы захотите ознакомиться с шаблоном "Кластер", который представляет собой шаблон для разбиения очень большой сложной модели предметной области на независимые кластеры со строгой иерархией зависимостей. Этот шаблон не зависит от NO, хотя на практике было бы мало смысла принимать его, если вы также не пользовались преимуществом NO.
И здесь я подхожу к своему главному, и что привело к определению шаблона НЕТ в первую очередь. Все это очень хорошо принимает строгие принципы для разделения интересов по всей архитектуре. Но если вы не достигнете точки, в которой как уровень постоянства, так и уровень представления будут автоматически получены на 100% из объектной модели домена, вы потеряете большую часть преимущества этого разделения интересов, потому что любое изменение в домене Модель подразумевает изменения в других слоях, косвенно, если не напрямую. Современные ORM проделали большую работу по сопоставлению доменной модели с постоянным уровнем; Голые Объекты сделали это для модели предметной области на уровне пользовательского интерфейса.
Короче говоря, если вы примете систему, твердо приверженную принципам "НЕТ", вы получите заявленные преимущества Onion. Если вы хотите или хотите построить свою собственную архитектуру и хотите принять принципы Onion, то это нормально, но тогда не стоит пытаться выяснить, как каким-либо образом адаптировать любой из принципов NO к этой пользовательской архитектуре: это будет очень трудно, и вы, вероятно, не увидите никаких преимуществ.