我们设计系统是为子完成某项业务,为系统设计特定的模式则主要是了项目开发和后期维护,而两者中维护更是主要目标。为此,Peter Coad提出了他的三个设计目标:可扩展性,灵活性,可插入性。对于以抽象、继承和多态为主要特性的OO设计,人们又提出了三个设计原则:
1.封装变化Encapsulate what varies.
2.面向接口编程而非实现 Code to an interface rather than to an implementation.
3.优先使用组合而非继承 Favor Composition Over Inheritance
整体来讲,我觉得设计目标更倾向于架构设计的指导思想,而OO的特性和原则更接近具体编码的指导思想。
从整体的系统设计入手,我认为设计工作主要为分横向与纵向设计两个方面。横向设计主要包括业务范围的设计,纵向设计则主要体现在业务层次的设计,说得熟悉一点也就逻辑架构也物理架构的综合设计,它包括了一个整体的业务逻辑实现过程。就设计的先后顺序而言,我更倾向于先横向再纵向,也就是先确定业务范围,再根据业务要求及业务范围确定相应的层次。
为了达到《设计目标》,需要对业务进行分类(当然,我这里的业务指的是系统功能业务,即系统角色,如工具、逻辑控制、前端、数据库等,这些需要根据具体的客户业务进行翻译后得出),确定哪些是变化的,哪些是不变的,哪些是公用的,哪些是私有的,然后再此基础上,我们产生了业务间的逻辑架构,相应的也有了业务的接口。
如果我们的系统包含子系统(这个在使用Maven进行系统管理的时候会经常遇到),那么一个普通的Java系统就会形成这么一个层次结构:系统->子系统->模块->包->类。
为达到封装的要求,我们会希望在每个层次的每个单元都相互独立(高度内聚,低度耦合)。这样对于每个层次重复按照设计目标进行设计,那么我们最终可以得到一个“高度内聚,低度耦合,面向接口”的系统,而且,这个结论对于系统的每个单元都适用。
而为了完成这个目标,关键在于每个层次的业务分析,也就是识别变化,恰当抽象,做好封装。
而要做好抽象的接口,掌握好基本的设计模式是至关重要的。这些算是经验的总结,涵盖了日常使用的大部情况。当然,如果可以,也可以在日常设计中根据自己的设计目标形成自己的设计模式。可以说,整个设计过程其实就是对设计模式的反复迭代。
分享到:
相关推荐
在CSS编程中,OOCSS(Object-Oriented CSS)和SMACSS(Scalable and Modular Architecture for CSS)是两种重要的设计模式,它们旨在提高CSS代码的可维护性和可扩展性。这两种模式都是为了优化CSS编写方式,降低对...
浅谈java中OO的概念和设计原则 OO(面向对象)是Java语言的核心概念,深入理解OO的概念和设计原则是每个Java开发者必备的技能。下面我们将从OO的设计基础、面向对象设计模式、设计目标、设计原则五大方面来浅谈Java...
对于中大型项目,三层架构可以提供更好的组织结构和可维护性;而对于需要高度分离和灵活界面的项目,MVC模式可能是最佳选择。总的来说,理解并熟练掌握这些架构模式,能帮助开发者构建出高质量、易于维护的ASP.NET ...
OOCSS的两大核心原则是分离结构和容器以及分离容器与内容。容器是指包裹内容的元素,例如div等。在OOCSS中,容器的内容应该是可以跨容器复用的,不应该将样式写得太过具体,以至于只能在一个特定的容器内使用。这...
【ASP.NET编程知识】浅谈.NET平台下深拷贝和浅拷贝 在.NET平台下,对象拷贝是一个常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象复制时有着显著的区别,对...
【ASP.NET编程知识】浅谈谁都能看懂的单点登录(SSO)实现方式 单点登录(SSO)是一种允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统的机制。这提高了用户体验,简化了身份验证过程...
例如,通过简笔画展示字母组合 "ar" 和 "oo" 或 "ou" 在单词中的发音,可以让学生更直观地理解和记忆。 其次,简笔画在词汇教学中的运用能提高单词记忆的效率和持久性。小学生往往对图像有强烈的感知力,简笔画可以...
【ASP.NET编程知识】浅谈对Jquery+JSON+WebService的使用小结 在现代Web开发中,ASP.NET结合jQuery和JSON以及WebService技术是构建动态交互界面的常见选择。jQuery作为一个强大的JavaScript库,以其简洁易用的API...
2. **性能提升**:采用更现代的架构,提高了渲染速度和应用性能。 3. **依赖注入改进**:更简单、更强大的依赖注入系统,使得组件之间的通信更为便捷。 4. **模块化**:支持模块化开发,有利于代码组织和优化。 5. *...
3. **DataSet** 和 **DataTable**:DataSet 是一个内存中的数据集合,可以包含多个 DataTable,它们模仿了数据库结构。当需要离线处理数据或者进行数据操作时,这两个组件非常有用。 4. **DataAdapter**:作为...
8. **构建专属知识导图**:绘制知识地图有助于整理学习脉络,将零散的知识点串联起来,形成系统的知识体系。随着学习的深入,不断更新和完善知识导图,使之成为个人学习的有力工具。 总之,学好JavaScript需要明确...
这种设计允许开发者按需组合不同的中间件组件,实现高度定制的web应用功能。 首先,让我们来看看如何创建最简单的ASP.NET Core中间件。在Visual Studio中,你可以创建一个ASP.NET Core 2.0的空项目。在`Startup.cs`...
这种做法有助于提高代码的可维护性和复用性,减少代码重复,使得页面结构更加清晰。 在ASP.NET中,`include`通常用于引入静态的HTML、CSS、JavaScript或者服务器端的ASP.NET代码片段。例如,页头、页脚、导航栏等...
3. `UseDirectoryBrowser`中间件则允许用户通过浏览器直接查看和导航到服务器上的目录结构,这在开发环境中非常方便,但在生产环境可能需要谨慎使用,因为它可能暴露敏感信息。 在ASP.NET Core中,这三个中间件需要...
c Task Invoke(HttpContext context) { // 使用 _...通过依赖注入,可以轻松地在中间件中使用其他服务,实现更加模块化和解耦的代码结构。正确配置和使用这些功能,可以构建出高效、安全的 ASP.NET Core 应用程序。
ASP.NET学习路线图是一个系统的过程,对于有一定面向对象编程经验的人来说,可以从以下几个步骤开始: 首先,你需要掌握一门.NET面向对象语言,如C#或VB.NET。这是因为ASP.NET完全基于面向对象编程,没有基本的OO...