我遇到的情况是我必须从头开始设计和实施一个系统。我对架构有一些疑问,我希望你的评论和想法。
项目快速信息:这是一个以数据为中心的Web应用程序。
该应用程序将在带有MS SQL SERVER 2008数据库的Microsoft .NET Framework 4.0上构建。
要求:
以下是我构建的架构图:
架构简报
我的担忧:
寻找有价值的意见和建议。 如果我做错了什么,请把我指向正确的方向。
答案 0 :(得分:6)
我建议以下评论:从一开始你的方法就会产生紧密耦合。这直接违背了你的要求#3“松散耦合”
在图表中,您定义了两个模块。主模块和模块2.我猜这两个模块彼此完全不同。我的意思是你可以完全单独开发它们然后插入它们,因为它们解决的业务问题是不同的。
但是,您当前的架构方法:
值得考虑的是:将主模块和模块2构建为单独的垂直服务堆栈。
我的意思是主模块和模块2成为主要服务和服务2
每个服务都有自己的数据库,它自己的业务层,它自己的服务层以及它自己的UI组件。
然而,这引起了关注:主服务和服务2如何协同工作来创建我的产品?
解决这个问题:
在UI端,您可以使用客户端代码将前端拼接在一起,以将主服务和服务2的响应加载到一个视图中。
在后端,您使用发布订阅消息传递,以允许主服务订阅服务2中发生的事件,反之亦然。
这将导致应用程序在松散耦合的垂直服务堆栈之上构建一个应用程序,通过异步交换消息来保持一致性。
如果您需要在应用程序中添加一个新模块,您可以创建一个支持所需功能的新服务堆栈,并在不需要对其他堆栈进行任何更改的情况下进行连接(理想情况下,这是唯一的原因)更改现有堆栈将是他们想要订阅来自新模块的事件)。
这是一种与你所建议的方法截然不同的方法,但是在我的意见中,这种方法可以让你更好地满足松散耦合的要求。
答案 1 :(得分:1)
WPF,WinForm等UI应该调用WCF层是有道理的。我假设拥有多个UI是一项业务需求,否则如果您只能拥有一个UI,则响应式Web UI是最灵活的选择。
但是,我不认为您的MVC UI需要使用WCF层。它可以直接调用域层。那会更快,并删除一个无意义的层。
显然,只要您不在WCF层中放置任何逻辑,这只会起作用。而且WCF层实际上不应该有任何逻辑。
您还声明要放置IoC&分布式服务层中的DI。就MVC UI而言,这没有多大意义。您需要在MVC项目中使用DI,以便对控制器进行单元测试。
答案 2 :(得分:1)
为什么体系结构图不使用ASP.NET的域层?
在我看来,您可能正在构建您的应用程序。此外,虽然支持6种(或左右)不同的前端技术看起来很棒,但维护所有这些技术的努力将是可怕的。我坚持使用一种技术作为前端 - 最有可能是客户端MVC或类似的HTML5。
答案 3 :(得分:0)
看看你的图表,我有几点我不清楚: