zoukankan      html  css  js  c++  java
  • 分布式架构

     

     

     

    1. 1.  实体职责

    1.1.  PO(Persistant Object) 例如EntityFramework中生成的数据实体,映射数据库中的表结构;

    1.2.  BO(Business Object) 对上层暴露的业务实体。架构师在开发初期定义的业务接口中所用到的实体;

    1.3.  DTO(Data Transfer Object) 分布式服务(WebService/WCF)暴露的契约实体;

    1.4.  VO(View Object) 例如ASP.NET MVC中的V(UI实体);

    1.5.  参考:http://www.cnblogs.com/BigTall/archive/2007/12/12/991779.html

    1. 2.  项目结构:

    2.1.  Solution主要放公共、第3方的一些源;Nuget的程序包在项目跟目录下packages文件夹中。

    2.2.  Core分为Contract和Entity,其中Contract定义Service端对外暴露的契约接口,Entity定义Contract中用到的契约实体(DTO);Contract按业务划分文件夹如下图所示:

    Entity的目录结构:

    Contract的参数和返回值都定为DTO,参数DTO就放在对应业务文件夹中parameter文件夹下,返回值DTO就在Result文件夹下;这些是由架构师定下来的,开发只需按照接口去编码。
    PS: 因为服务不能有重载方法,所以把参数都定义到一个DTO实体里,其次如果用重载的方式,在业务变更时入参顺序发生变化时就不受控制。

    2.3.  Service是对Core的具体实现,如果不需要分布式的服务,那么Service的顶层可定义为逻辑层,同样Core就定义为BO。

    2.3.1. 实体转换过程:PO - BO - DTO

    2.3.2. DataAccess为数据访问;

    2.3.3. BusinessLogic 为业务逻辑的实现;

    2.3.4. Service 为服务Contract的实现;

    2.3.5. Host 为服务宿主,可以为站点也可以为window服务等;

    2.4.  Portal端可与Service端在不同的解决方案(项目分离);Portal分为FacadeModel、ViewObject和WebUI,其中FacadeModel与多个Service交互并对上层暴露ViewObject如下图所示:

    WebUI通过ViewObject与FacadeModel做呈现和回调,应付很多实际的场景,Remoting Windows Services,WebServices,Restful Services

    2.5.  此小节选看

    2.5.1. 如果后台UI比较复杂可以考虑使用ASP.NET MVC,如果必须使用ASP.NET WebForm推荐采用MVP模式如下图所示:

    参考:
    http://www.cnblogs.com/bluewater/archive/2006/12/11/589214.html
    http://msdn.microsoft.com/zh-cn/magazine/ff955232.aspx

    2.5.2. 如果必须使用Ajax可以考虑使用knockoutjs的MVVM模式,
    参考:http://knockoutjs.com/

    2.5.3. 亲,总有一款适合您!

    1. 3.  设计总结:

    3.1.  原来的开发模式,一个实体承担了过多职责(即当PO、又当BO),属性会随业务的成长越来越臃肿(变相增加维护成本)就很可能会发生此现象:例如用户(UI层)只需要喝牛奶,而维护的开发误把奶牛(Data层PO)和空瓶子(Biz层BO)打包给用户,用户只好拿奶牛自己挤到瓶子里喝。实际上用户只关心喝的奶而不是具体生产过程,这也是实体职责分离的好处。

    3.2.  不管是MVC,MVP还是MVVM都是职责分离解耦,只是实现方式不同。虽然实现方式有很多途径,但具体还要看公司的策略。

    3.3.  个人推荐EF + WCF(WS是WCF的子集) + MVP&MVVM 这种组合模式开发。好的开发模式可以帮助开发更效率地编写高健壮性的代码,而不是把开发变“傻”。

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/Googler/p/2871346.html
Copyright © 2011-2022 走看看