我已经开始研究新的企业项目,平台ASP.Net MVC 4,jQuery,Knockout,.Net 4.5,WCF,工作流程,业务规则等,我试图找到一个很好的参考,我可以从中受益创建解决方案整个项目。经过我自己的研究(谷歌,stackoverflow和许多其他博客),下面是我创建的解决方案。但是,我仍然不确定我创建的是最佳实践,并且接下来几年会采用更新的平台和业务变更。
一个解决方案(6个项目)
Solution(ProjectName)
Web(Having MVC 4 project template, added many script reference thru Nuget like jQuery, knockout etc.,), IOC Container(Castle Windsor)
DTO
ServiceManager(WCF 4.5)
Core
Business Rules
Workflow
Domain Objects
Common
Logging - ILog
Caching - HttpCache
Security - Custom
DAL
Repository
Unit of Work
Other Data Base like DB2, Oracle
这是序列
Web Layer --> call to DTO ( Request/Response skelton) --> Service Manager(WCF) --> Core(Business Rules, Workflow flow etc) --> DAL.
跨层添加公共项目。
请建议任何好的设计模式来实现内外。例如,有效的Web服务调用方式,代理通道类型,分布式事务,连接不同的数据源。
现在我有2个不同的数据库,一个是SQL Serer,另一个是DB2托管的一个主机。 DAL项目我添加了EF来处理基于SQL的事务。而DB2我添加了OLEDB瘦驱动程序。我需要一些设计模式,如何根据请求将调用者路由到不同的源。
我还需要一些关于依赖注入和IOC框架的好建议。我已经决定使用城堡windsor(我看过NInjuct,Spring.Net,Autofac),但仍然不确定缺点。
非常感谢您对此标记的指导和建议。
答案 0 :(得分:1)
如果我是你,我从一开始就不会创造那么多层。我说从基本的东西开始,然后随着你的扩展。
没有真正的最佳实践,一切都取决于你的项目。但总的来说,我发现在需要时添加图层会更容易,然后再删除图层。如果您发现自己正在通过一个图层进行调用,那么您就可以很好地指示您有太多图层。
对于依赖注入,您可以使用您提到的任何一个容器,它们都具有相似的功能。就个人而言,我更喜欢Ninject,但这只是一种品味问题。您可以使用DI容器的一个缺点是,由于松耦合(如果您正确使用它),导航代码可能会变得有点困难。 Resharper对此有很大的帮助。
从我所看到的,你有一个非常厚的服务层,它拥有所有的域逻辑,除此之外还有许多只有属性的类(跨所有层的公共项目)。这就是所谓的贫血模型,有些被视为反模式(虽然它通常可以很好地完成工作)。另一种方法是DDD,您可以在同一类上对行为和状态进行建模。在我看来,如果您也应用CQRS,这种方法效果最好。 (命令查询责任隔离)
如果您对这种方法感兴趣,我写了Introduction to DDD, CQRS and Event Sourcing,您可以查看。有关更多信息,请查看Greg Young和Udi Dahan的所有内容