zoukankan      html  css  js  c++  java
  • 再谈三层架构(传参数、返回值)

          运用分层的思想来做东西,设计时往往没问题,但如果不是很熟悉它的思想,往往会在编码时不知不觉地破坏了它的设计架构,导致编码与设计不符。比如,层与层之间传递参数的问题(用实体还是简单数据类型)、各层向上的返回值问题(用实体对象还是DataTable、DataSet)。报表绑定要注意什么。

          下面就这几个问题(三层为例)进行讨论,核心思想是项目开发(编码)一定要符合项目设计。

    传参数

          如果采用三层架构来做项目,那么我们必须时刻围绕面向对象思想“三层架构”这个体系来编码,即要符合各层之间的引用关系。不能破坏它的架构体系(即不能破坏设计的各层之间的关系)。

          三层架构规定了三层之间是通过传递Model(实体)参数来进行交流的。这个架构中,外观上看,只有这四个包中类下的对象(简单的数据类型封装在对象内部),不存在其它的任何东西,所以说层与层之间的参数传递必须通过实体对象来完成。如果用简单的数据类型(传递实体类的某个属性)就破坏了三层架构的体系(体系中不存在那个东西)。

          传递实体,符合面向对象封装的原则,信息隐藏在类中 ,后期还便于扩展与维护。

          当然如果设计不是分层的话,平时的传递参数时,传实体与一般数据类型各有利弊。

    返回值

          其实与上边是同一个问题,之前可能为了便于与控件绑定,在D层就返回DataTable或DateSet

    这既违背了面向对象的思想,也背离了三层架构的设计思想。

          首先与上面同理,三层架构中只有四个包(UI、BLL、DAL、Model)中类下的对象(简单的数据类型封装在对象内部),不存在其它的任何东西,所以层与层之间不能通过DataTable或DateSet来交流;那样的话B层和U层也都会用到DataTable或DateSet,也就是说B层和U层已经直接和数据库有了关系。这些都背离了三层架构的设计思想。

          其次,返回DataTable或DateSet的话就会使得实体(Model)层没有了用。这本身就是实体该干的事。正确的做法应该将返回的东西封装在实体中,然后返回实体对象在实现各层之间的交流。

    报表绑定

          我们用到报表时都习惯直接将数据库表绑定到VS报表,这样的话,我们必须要给出设计说明,因为这已经不符合我们上面设计的三层。而是用的U层与数据库直接交互,就可以如下画图另行说明:

     

          总结:分层思想强烈要求面向对象,如果一个项目绝大部分适合用某一个设计(例:上面的三层),而一小部分用另一个设计(例:上面的报表绑定)比较好,就可以同时采用这两种设计,但一定要对那一小部分采用的设计给出说明。即,任何情况下,项目开发(编码)一定要符合项目设计。

  • 相关阅读:
    【教程】模拟登陆百度之Java代码版
    Redis错误配置详解
    Redis内存存储结构分析
    Notepad++安装插件
    hadoop2.x 常用端口及定义方法
    微信订阅号可以开通微信支付吗?
    CDH 的Cloudera Manager免费与收费版的对比表
    Hadoop调度框架
    再谈spark部署搭建和企业级项目接轨的入门经验(博主推荐)
    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3106888.html
Copyright © 2011-2022 走看看