zoukankan      html  css  js  c++  java
  • 关于系统设计分层

          关于分层这个话题似乎老生常谈了。MS自己也给出过自己的PETSHOP,难过的说,自己真的没细心看过,充其量算是走马观花的一略而过。当时的能力也就那么回事,后来项目中又牵涉了C,也就忘之大吉了。近来经常看到园友发文阐述系统设计分层之问题,受益匪浅。在此先谢谢各位仁兄的无私奉献。悲哀的是鄙人两年才有幸协助完成三个项目,第四个项目目前正在进行中。下面鄙人就个人目前的理解发表下关于分层的愚见,还请路过之兄台多多斧正。

    首先来个大图,增加下感性认识:


     

    这个分层主要以解决方案文件夹来实施业务模块区分。

    Client下有两个项目,一个是不可缺少的Website,另一个是本项目向其他平台提供服务的接口所在(当时为另一Java项目提供服务,当时的WCF似乎还处于婴儿期吧)。在Website那层App_code下有个ApplicationBasePage.cs类,所有增加新Web窗体均继承此类,此处提供公共的一些动作。关于那个Common/Javascripts,Common/Usercontrols一看就明白的,不用多说了。

    在Core解决方案文件夹下,主要放置整个项目可以公共利用的一些操作。从图中看出主要区分为Enums/.Exceptions/Utils根据需要可以再添加即可。在用到之工程中引用此工程DLL即可。注意此处BaseEntity.cs,整个项目中所有实体类均要继承此类。此处为空,在实际需要的时候可以加入内容。

    解决方案文件夹DE下就是所谓的分层所在了。其主要是以一个大业务模块来划分的。按图所示,意思很容易明了。(注:解决方案文件名DE与其下小业务模块文件夹名DE仅仅重名,别无它意)。

    BusinessLogic层处设计采用了Facade模式,从图中可出,任何一个Service均有一个接口定义类和具体实现类。并按DefalutImpl来分开两者。对外只提供I***Facade的接口定义,隐藏所有Service的具体实现。

    关于Common层从图中可以看出,无外是模块下常量放置处。根据各文件夹分类即可。在实际开发中,除Enums和Utils需要自己人工书写,EntitiesBizLogEntriesExceptions均由工具按规则生成。

    数据层DataAccess只存放各个实体类的数据操作。无任何其它放置。

    InnerInterfaces是为解决各工程间可能会导致循环引用的问题而增加的。将向外提供服务的接口在此定义,任何用到此服务的工程引用此工程即可。(循环引用的问题当时困扰了好久,后来由研发事业部同志改进了开发插件才解决此问题。) 

    因现在开发都是团队协作开发,这样分层,各人负责各个功能模块,代码的签入签出不会影响别人,而且编译单元自己控制,不会出现多人编译同一工程引发的冲突。这在大型开发团队中非常重要。

  • 相关阅读:
    今天再次认真整理了浏览器收藏夹
    今天再次认真整理了浏览器收藏夹
    【博客之星】CSDN2013博客之星--分析和预测
    【博客之星】CSDN2013博客之星--分析和预测
    CSDN博客的文章分类和战略规划
    CSDN博客的文章分类和战略规划
    《社交红利》读书总结--如何从微信微博QQ空间等社交网络带走海量用户、流量与收入
    《社交红利》读书总结--如何从微信微博QQ空间等社交网络带走海量用户、流量与收入
    个人名片与诚信
    个人名片与诚信
  • 原文地址:https://www.cnblogs.com/jiangshaofen/p/1237778.html
Copyright © 2011-2022 走看看