`
lin5061
  • 浏览: 83193 次
社区版块
存档分类
最新评论

对象级的门面和方法级的门面

UML 
阅读更多

 

问题是这么引出的:我们在写Action的时候,要用到一些Service。
第一种方法:按照老的方法,用到哪些Service就注入哪些Service,大不了多写一些setter方法,如下图所示:

 

 


这种做法的优点是:你的Action用到哪些Service很一目了然。但是它的缺点却更明显:首先是code的时候,用到一个新的service你都得写一下setter方法,这对代码结构很不清晰;第二:如果两个或多个Action存在的情况下(一般情况下这是最常见的),那你的代码就更乱了,Action中占主要篇幅的居然是那些getter和setter,主要的有用代码却那么一点点!而且各个Action和Service之间的关系也很乱,看下图:

 

 

第二种方法:引用门面类(Facade),用它把Serive和Action分开。这时会出现一个问题,这个Facade是方法级的还是对象级的呢?
        如果是方法级的,那它里面的方法几乎都是对目标Service的一个引用,如果原来有三个Service,每个Service有四个方法,那这个Facade就得有12个方法!更可怕的是,如果这时再引入一个Service,那改动更多了。
        但是如果这个Facade是对象级的,即它是对Service的引用,而不是对Service的方法的引用,那就好办多了,它只要关心有多少个Service就行,添加一个Service也只是添加一个注入而已,不会改动太多。对象级的Facade唯一一点不足就是,在Action里,可能会出现调用太长的代码,如:this.getXXXFacade().getXXXService().XXX();但这应该不会对我们的设计带来影响。
在使用了Facade后,形成的UML简图如下:

 

 



从图中可以看出,Action和Service层的关系简单多了(其实应该说成:不可见了),Action里也只要有注入Facade就行了,不会出现过多注入的情况。

其实你可能觉得,这种对象级的Facade更像是一个工厂,但名字不重要,只要这符合设计、方便代码、利于重构就行了。

 

分享到:
评论

相关推荐

    jQuery省市二级联动关联店面查询表单代码

    在这个“jQuery省市二级联动关联店面查询表单代码”项目中,开发者利用jQuery实现了用户友好的店面查询功能,特别适用于网络营销场景,帮助用户快速找到连锁店铺的全国网点。 首先,我们要理解“省市二级联动”的...

    设计模式之门面模式(附demo)

    3. **客户端(Client)**:使用门面模式的代码,它通过调用门面对象的方法来与子系统进行交互,而不必关心子系统内部的实现细节。 在实际应用中,门面模式可以提高代码的可读性和可维护性。例如,"doorshow"可能是...

    企业门面以及新闻发布系统

    【企业门面以及新闻发布系统】是一个基于JAVA技术构建的企业级网站项目,主要目的是为企业提供一个展示自身形象和发布新闻信息的平台。这个项目的核心部分包括了企业门面的设计和新闻发布系统的实现,对于学习JSP...

    经典的EJB模式——门面模式

    门面模式,作为一种软件设计模式,是EJB(Enterprise Java Beans)中的一种经典模式,它在企业级应用开发中起到简化复杂系统接口的作用。EJB是Java编程语言中用于构建服务器端企业级应用的组件,它们是可分布式部署...

    Microsoft+.NET企业级应用架构设计

     2.1.2 UML的模式和使用方法  2.2 UML图表  2.2.1 用例图  2.2.2 类图  2.2.3 顺序图  2.3 小结  2.4 本章的墨菲法则 第3章 设计原则和模式  3.1 基本设计原则  3.1.1 警钟因何而鸣  3.1.2 结构化设计  ...

    面向对象程序设计之C#版Grady Booch.pdf

    - **封装、继承、多态**:封装可以看作是将数据和方法包装在一起,形成独立的单元;继承允许子类继承父类的属性和行为,从而实现代码复用;多态则让不同类的对象可以通过相同接口进行操作,增强了程序的灵活性。 **...

    高级面试题.docx

    相比于面向过程,OOP 更注重对象的抽象和交互。以播放器为例,面向过程是将每个步骤拆分开,而面向对象则是将每个步骤封装为独立的对象,每个对象负责一部分功能,遵循单一职责原则,提高代码可维护性。 3. Java ...

    戏说面向对象程序设计C#版

    在C#中,可以通过定义类、属性和方法,以及使用访问修饰符如public、private等,来实现有效的封装,从而构建出更加健壮、易维护的软件系统。 ### 设计模式的应用 设计模式是在特定情境下解决常见问题的模板,它们...

    Android高级面试题.pdf

    对比面向过程编程,面向对象更强调对象和类的概念。以播放器为例,面向过程将整个播放过程分解为多个步骤,而面向对象则是每个步骤对应一个对象,对象之间协作完成任务,遵循单一职责原则。 3. **Java线程创建方式...

    Microsoft+.NET企业级应用架构设计 超低积分

     2.1.2 UML的模式和使用方法  2.2 UML图表  2.2.1 用例图  2.2.2 类图  2.2.3 顺序图  2.3 小结  2.4 本章的墨菲法则 第3章 设计原则和模式  3.1 基本设计原则  3.1.1 警钟因何而鸣  3.1.2 结构...

    电子商务师四级-第1章.pptx

    首先,传统商务是人类社会中自交换行为诞生以来的一种基本商业形式,包括直接销售、店面销售和无店销售等多种方式。而电子商务,从国际组织的定义来看,起源于电子数据交互(EDI),并在1997年被世界电子商务会议...

    完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt

    Java高级教程中的第六章主要讲解了五个常用的设计模式:单态模式、MVC模式、简单工厂模式、门面模式和适配器模式。设计模式是软件工程中经过实践验证的解决常见问题的有效策略,旨在提高代码的可复用性和可维护性。 ...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    某集团高级营销精英研修培训.pptx

    **进入主要零售终端的调研方法**包括二级调研,了解零售商的采购倾向、零售概念和店面设计,以及通过出口处调查收集消费者需求、品牌重要性和价格倾向等信息。解决零售商面临的问题和优化操作流程也是关键。 **联盟...

    2018级_OOAD 月考21

    【2018级_OOAD 月考21】是一场针对软件开发中面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)的考试,主要考察学生对软件设计模式、GRASP原则、类与对象间的耦合与内聚等核心概念的理解和应用...

    软件工程的一份很全的报告 面向对象的分析设计测试

    - **建店成本低:** 相较于传统实体店,网上商城的成本更低,包括无需办理营业执照、租赁店面以及大量存货等,初始投入成本可低至1500元左右。 - **资金压力小:** 不需大量的进货资金,避免了传统商城因囤货造成...

    超轻量级 JSON / XML / YAML 解析门面 API,用法简单,不依赖具体的 JSON / XML / YAML 实现

    JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。JSON格式通常用于服务器向Web页面发送数据,例如在AJAX请求中。该API应该提供解析JSON字符串为...

    设计模式资料有助于你更好的了解

    总的来说,工厂模式和门面模式是设计模式中的重要组成部分,它们不仅提供了创建对象和简化系统访问的工具,还是理解高级框架如J2EE的关键。学习和应用设计模式能够提升软件质量,降低维护成本,也是成为一名专业、...

Global site tag (gtag.js) - Google Analytics