在洋葱框架中,外层可以访问所有内层。如果我这样做,我的外层(MVC中的UI层/控制器)也可以直接访问应用程序/业务服务和存储库。现在,我的控制器可以创建域模型并使用存储库将其持久保存在数据存储区中。从而绕过了业务层中编写的验证和其他业务规则。我相信,我错过了一些东西。请帮忙。
public SpeakerController(IConferenceRepository conferenceRepository,
IUserSession userSession, IClock clock)
: base(userSession) {
_conferenceRepository = conferenceRepository;
_clock = clock;
_userSession = userSession; }
来自http://jeffreypalermo.com/blog/the-onion-architecture-part-2/
答案 0 :(得分:1)
我说"不,"虽然巴勒莫本人在推特谈话中表示不同意。我说每个层都允许与下一个内层对话,而不是绕过它。我对此规则的例外是,如果所讨论的功能基本上只是参考数据的CRUD。我认为没有理由为这类数据引入额外的复杂性。
另一种方法是让您的存储库实现强制执行业务规则的验证。由于实施是在洋葱的最外层,这应该很容易做到。
我发现Alistair Cockburn的Hexagonal Architecture更能说明Onion Architecture。基本上我的应用程序里面有#34;"和#34;在我的申请之外。"只要您需要越过该边界,就需要一个适配器来保护您的应用程序免受实现细节的影响。