`
javatar
  • 浏览: 1708864 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

Builder接口重构

    博客分类:
  • HTTL
阅读更多
MeteorTL(http://www.meteortl.org)以前的(0.5.1以前)版本中的API接口为:
TemplateFactory 和 ContextFactory 用于创建 Template 和 Context 两个核心 Domain,
Factory 用于合并 TemplateFactory 和 ContextFactory 两个工厂,
Builder 用于创建 Factory,
Engine 实现 Builder,通过Builder接口一步步导航到其它接口,

然而一直感觉Builder接口很不顺眼,
因为它与core包中的其它接口内聚性不高,
它只是作为core包其它接口的使用者,而不是被core包其它接口使用,或继承于core包其它接口等更强一点的关联,并且不是核心Domain。
有几个版本试图将它移到engine包,但发现也并不妥善,
因为整体架构声明engine包用于实现core包所有接口,

仔细研究Builder的实现类Engine, 发现其持有一个不合理的Configuration状态,
public interface Builder {
	Factory buildFactory();
}

public class Engine implements Builder {

	private Configuration config;

	public Engine(Configuration config) {
		this.config = config;
	}

	public Factory buildFactory() {
		// 通过config信息创建一个Factory接口的实例并返回
	}

}

用户调用方式:
Factory Factory = new Engine(config).buildFactory();




问题在于config只在一次建造过程有效,Engine类持有它毫无意义,重构如下:
public interface Builder {
	Factory buildFactory(Configuration config);
}

public class Engine implements Builder {

	public Factory buildFactory(Configuration config) {
		// 通过config信息创建一个Factory接口的实例并返回
	}

}

用户调用方式:
Factory Factory = new Engine().buildFactory(config);


但这样Builder就会依赖于Configuration接口,
而按整体架构core包是不能依config包的,
所以只能把Builder移到engine包,
发现Engine实例的存在也没起任何作用,再重构为:
Factory Factory = Engine.buildFactory(config);

这样,Builder接口就应该删除,

在我试着删掉Builder接口后, 猛然发现Engine如果直接实现Factory会更合理,如:
public class Engine implements Factory {

	public Engine(Configuration config) {
		// 通过config信息建造自身
	}

	public Template getTemplate(String name, String encoding) {
		...
	}

	...

}

用户调用方式:
Factory Factory = new Engine(config);


总结:
当发现放在哪都不合理的类或接口,或许它本身就不应该存在。
分享到:
评论

相关推荐

    基于DSP Builder的格型FIR滤波器的设计与实现

    格型FIR滤波器是一种特殊的FIR滤波器结构,它通过对传统FIR滤波器的重构来减少所需的乘法次数,从而提高计算效率。这种结构的特点在于采用了反射系数和递推公式来表示滤波器的传递函数,使得计算更加简洁。 #### 四...

    重构与模式.[美]Joshua Kerievsky(带详细书签).pdf

    本书开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。本书不仅展示了一种应用模式和重构的创新方法,而且有助于读者结合...

    Borland C++ Builder高级编程技术

    8. 性能优化:通过对内存管理、算法选择、代码重构等方面的深入学习,可以提高程序运行效率,减少资源消耗。 9. 自动化与脚本支持:Borland C++ Builder允许集成自动化和脚本功能,使得用户可以自定义扩展程序行为...

    c++ builder 2010介绍

    - **重构**:提供代码重构工具,方便修改现有代码结构而不改变其行为。 - **代码完成与参数支持**:自动完成代码片段,减少打字错误并提高编码速度。 - **代码折叠**:通过隐藏部分代码来提高代码可读性。 - **模板*...

    StyleBuilder(Windows主题制作修改工具)

    - **编程接口**:对于有编程基础的用户,StyleBuilder还提供了更深入的定制选项,如使用XML和Visual Basic Script (VBS)脚本来实现高级功能。 总而言之,StyleBuilder是Windows用户自定义桌面体验的强大工具,通过...

    C++ Builder 核心编程技术

    9. **网络编程**:C++ Builder提供了网络编程接口,可以用来创建网络应用,如TCP/IP通信、HTTP请求等。 10. **设计模式**:理解并应用常见的设计模式(如工厂模式、单例模式、观察者模式等),提高代码可维护性和可...

    重构知识总结篇

    9. **Builder**:逐步构建一个复杂的对象,适合封装复杂对象的构建过程,特别适用于重构复杂对象的构建。 #### 结论 重构不仅仅是对代码的简单修改,它是一种艺术,需要开发者对代码的深刻理解以及对设计模式的...

    [企业政府]Visual SiteBuilder网站综合管理平台(VSB) .zip

    学生可以通过阅读和理解这些代码,了解Web应用的架构设计,如MVC(Model-View-Controller)模式的应用,以及如何组织和管理项目中的类和接口。此外,还能学习到数据库连接池的使用,如C3P0或DBCP,以及如何使用JDBC...

    flashbuilder_4_help

    Flash Builder 4 提供了一系列强大的编码辅助功能,如代码提示、自动完成、重构工具等,极大地提高了开发效率。同时,它还内置了调试器,支持设置断点、单步执行、变量监视等常见调试操作。 ##### 编码辅助功能: -...

    C++Builder高级编程技术(1).rar

    6. 代码重构和调试:C++Builder提供了强大的代码编辑器,支持代码自动完成、重构和调试功能,帮助开发者提高代码质量和调试效率。 7. C++标准库:C++Builder支持最新的C++标准,如C++11、C++14和C++17,使开发者...

    培训对象重构设计PPT

    - **建造者模式**(Builder):逐步构建一个复杂的对象,使得同样的构建过程可以创建不同的表示。 - **策略模式**(Strategy):定义一系列算法,将每一个算法封装起来,并且使它们可以相互替换。 - **模板方法...

    【IT十八掌徐培成】Java基础第20天-01_消息重构.zip

    消息重构,通常指的是对程序中的方法调用、接口交互以及类间通信进行优化的过程。在Java中,这涉及到方法的定义、参数的传递、异常处理以及设计模式的应用等多个方面。通过消息重构,开发者可以使得代码更加清晰,...

    PowerBuilder教程

    PowerBuilder具备出色的跨平台能力,开发者可以轻松地将应用程序从一个操作系统平台移植到另一个平台,而无需进行大规模的重构工作。这对于需要在多个平台上部署应用的场景尤其重要。 **2.5 自带编程语言...

    FlashBuilder4快捷键

    ### FlashBuilder4快捷键详解 #### 一、代码助手与修正 - **代码助手**: `Ctrl+Space`(简体中文操作系统中为`Alt+/`)。这个快捷键可以帮助开发者自动完成代码片段,当输入到一定长度时按下此键,FlashBuilder会...

    flashbuilder_4.5_help.pdf

    - **查找引用和重构代码**:定位代码引用,安全地进行代码重构。 - **格式化、导航和组织代码**:自动格式化代码,便于阅读和维护。 ### 运行与调试项目 - **Flash Builder工作台**:提供了直观的用户界面,便于...

    重构与模式

    当组合结构变得过于复杂时,采用“用构建器模式封装组合结构”(Encapsulate Composite with Builder)可以帮助我们管理复杂度。构建器模式通过逐步构建最终对象,避免了构造函数的臃肿,同时也提供了更大的灵活性,...

    PowerBuilder®+到+EAServer—移植项目方法指南

    #### 1.4 用户接口与数据访问的重构 对于非业务逻辑的部分,即用户接口和数据访问,也需要进行相应的调整。用户接口可以根据需求重新设计,采用PowerDynamo或JSP等技术转化为HTML格式,以适应Web环境。数据访问方面...

    Swift语言重构的码云iOS客户端源码

    9. **Interface Builder与Programmatic UI**:项目可能结合了Interface Builder(Xcode的可视化界面设计工具)和代码驱动的UI设计,两者结合可以提供更好的灵活性和效率。 10. **App Store Connect与版本发布**:...

    利用Builder方式创建对象示例代码

    3. Director(指挥者):构建一个使用Builder接口的对象。 4. Product(产品):要创建的复杂对象。 根据给定的文件内容,我们可以了解到在Java中如何使用Builder模式。下面详细阐述如何利用Builder模式创建对象。 ...

Global site tag (gtag.js) - Google Analytics