如何解决在n层架构中应在哪里输入应用程序设置,测试和合同/界面?
| 我正在使用Visual Studio 2010创建n层应用程序。 我有一个仅具有应用程序配置的项目,一个仅具有测试的项目,以及仅具有合同(接口)的项目。 在逻辑模型中,应在哪里输入应用程序配置值,测试和合同? 这是好习惯吗?解决方法
您要为要测试的每个项目单独的测试项目。假设它们是真正的单元测试,则例如
VENUS.Repository.Tests
将仅直接引用VENUS.Repository
。在实践中,除非您模拟所有内容,否则可能不会完全实现,但是,分离项目仍可以使您更加清楚目的。
我认为针对“合同”(我假设的接口)的单独项目是错误的。接口是一层用来引用其他层的公共入口点。因此,它们属于各自的层。也就是说,IFooRepository
属于VENUS.Repository
,而不是VENUS.Contracts
。 (但是,请参阅注释中的讨论。)如果将它们全部放在一个程序集中,您将通过说“要与任何层连接的任何人,只要引用VENUS.Contracts
,就可以疯狂运行”来破坏n层分隔。 ”
最后,这是更多情况,但是我的直觉是在您的合成根目录(通常是UI层)中有一个配置文件,并在组成它们时将配置依赖项注入到组件中。所以例如连接字符串不在ѭ1中引用的ѭ6中(以及其他所有人),而在VENUS.UI.Web
的ѭ9中引用。然后,当“ 8”组成其存储库依赖关系时,它将把该配置传递给存储库构造函数。例如:
string fooConnectionString = ConfigurationManager.ConnectionStrings[\"Foo\"].ConnectionString;
IFooRepository fooRepo = new SqlFooRepository(fooConnectionString);
// Now,as you compose the rest of your dependencies,// inject fooRepo into anything that requires an IFooRepository.
(这当然是“穷人的依赖项注入”的示例;如果计划使用适当的依赖项注入框架,将会有更好的组合方法。)
这样,您的存储库层就没有概念上对“配置”概念的依赖,而是仅以自然的面向对象编程方式(构造函数参数)表达其需求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。