英语轻松读发新版了,欢迎下载、更新

最近架构随想

圣殿骑士 发布于 2014年07月28日 | 更新于 2014年07月29日
尼克徐 等1人欣赏。

今天新加坡放假,闲来无事就发一篇博客:一则总结归纳项目构架经验,审视并逐步提高自己;再者分享最近学习所得,希望各位能讨论并给些建议。六月三十日从原来公司离职,七月一日入职新公司,不知不觉已经快一个月了。最近忙于学习新的行业知识以及项目的重构设计,没有时间发博客,也没有时间回复邮件及博文评论,忘各位见谅!

今天发几张项目重构设计草图,希望各位能积极探讨并给些意见! 整体方案:

整个架构分为Online(Web Application)和Offline(WPF Application)两部分。
Online(Web Application)需要支持不同的设备及浏览器,所以采用Bootstrap和ASP.NET MVC with Razor作为View,KnockoutJs作为MVVM框架。UI Designer设计好UI,然后由前端工程师绑定相应的UI Model到UI,后端工程师则负责相应的OOAD以及业务处理。
Offline(WPF  Application)需要在没有网络的情况下能正常工作,所以采用WPF  XALM作为View,MVVM Light作为MVVM框架。UI和后端的处理以及任务分配和Online(Web Application)基本一致。
Services :设置了Switch功能,可以配置是否使用WCF或者Web API或者直接调用Dll。
Domain Model:始终是应用程序的核心,必须投入大量精力,按照面向对象的分析和设计 (OOAD) 进行设计同时按照OOP进行开发。
Infrastructure:主要包括数据访问组件、通用权限框架、异常和日志处理组件、IOC/AOP功能、缓存机制,邮件,配置等基础或常用功能。
行业知识:由于项目牵涉到具体的行业(保险业),所以在业务流程中创建了Insurance Engine,专门处理保险相关的基础功能。
权限系统:由于整个项目比较庞大,再加上其他系统也需要用到同样的权限判断,所以创建了一个新的权限数据库,用来存储及处理权限相关的所有数据及规则,所有用户则来源于三个数据源(SQL Server, DB2和Active Directory)。
Unit Test:每一层都有单独的单元测试,方便项目功能自测,维护,重构,升级以及管理。

28-7-2014 12-31-12 AM

组件之间的详细关系如下:

28-7-2014 12-27-11 AM

各层之间的执行顺序如下:

28-7-2014 12-34-29 AM

权限系统:

用户来源于三个数据源(SQL Server, DB2和Active Directory)。
现实世界和系统通过角色进行关联,现实世界的用户及组的变化尽量不要影响到系统。
一个用户可以有多个角色,一个角色也分配给多个用户。
权限分为功能权限和数据权限。
权限系统要提供给几套系统使用,全部的接口通过Service的形式提供出来。

security

由于时间有限,设计可能存在诸多不足之处,如果大家有不同的意见或者建议,不妨在评论中指出,以便互相学习且共同提高!

共20条回复
SoloHiC 回复于 2014年07月28日

学生党表示还看不是太明白,只敢问楼主这么酷炫的架构设计图是什么软件上做出来的···

hugh_hou 回复于 2014年07月28日

如果能把前端online 与 offline作一些代码复用会不会能提高开发效率和维护成本,比如借鉴类似cordova或node-webkit那样的思路?

圣殿骑士 回复于 2014年07月28日

1楼 @SoloHiC 使用的工具比较多,最常用且主要的还是Visio 2013

圣殿骑士 回复于 2014年07月28日

2楼 @hugh_hou 只有ViewModel有部分差异,其他全部调用Services!

hugh_hou 回复于 2014年07月28日

@圣殿骑士 大牛的设计已经很好了,只是不知道online与offline有多少一致的功能。如果多的话online是web前端项目,用KnockoutJs话肯定会有大量JS代码,WPF应该用C#吧(我做java,.net不太懂,说的不对莫怪)。 所以对于数据展现层开发和将来维护也算个难点,毕竟只要牵扯用户交互的东西需求变更也会比后端多,维护两套代码肯定会比较麻烦。

rockyfire 回复于 2014年07月28日

5楼 @hugh_hou 跟其他web项目一样,@圣殿骑士 只是还没详细的说明前端的js架构管理. knockoutjs 只是比较核心的库,肯定还有其他的辅助

圣殿骑士 回复于 2014年07月28日

5楼 @hugh_hou KnockoutJs使用JS来构建ViewModel,WPF使用C#来构建ViewModel,不过只是Binding,Property,Command之类的东西,没有任何逻辑代码,所以没有太大的冗余代码,维护起来也还算方便!

hugh_hou 回复于 2014年07月28日

@圣殿骑士 明白了,不知道.net平台有什么好的自动化测试工具,推荐个自动化测试框架http://www.jazzautomation.com/ (绝不是钓鱼网站。。。)

圣殿骑士 回复于 2014年07月28日

6楼 @rockyfire 是的,还有Jquery等JS库作为辅助!

圣殿骑士 回复于 2014年07月28日

8楼 @hugh_hou 自动化测试工具是部分平台的,其他平台可以用,.NET平台也可以的!

kaedei 回复于 2014年07月28日

请问Domain Models是只有POCO么?和Business Logic是什么关系? 大神的图画的真漂亮,收藏一份先

圣殿骑士 回复于 2014年07月28日

Domain Models不只是POCO,POCO的Class之间用OO的思想创建,比如继承,泛化,聚合,组合等关系。Business Logic是Module中的Logic处理部分!

kaedei 回复于 2014年07月28日

12楼 @圣殿骑士 还有个问题哈,Infrastructure里面的Exception Handling是用来做啥的?有啥好处么?

圣殿骑士 回复于 2014年07月28日

Exception Handling是异常处理,把系统中的常见异常归纳到一起,然后集中处理。这个地方用AOP的方式对需要的地方加上标签就行了!

清醒疯子 回复于 2014年07月29日

见识一下架构,学习学习:)

rockyfire 回复于 2014年07月29日

9楼 @圣殿骑士 我也是刚来新加坡不久,.net从业者,有时间多联系.

forzaJuve 回复于 2014年07月29日

你的头像越看越跟草榴上的某某骑士很像

圣殿骑士 回复于 2014年07月29日

15楼 @清醒疯子 互相学习!

圣殿骑士 回复于 2014年07月29日

16楼 @rockyfire 行的!

圣殿骑士 回复于 2014年07月29日

17楼 @forzaJuve 呵呵,说明头像比较有影响力!

本帖有20个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]