`
xj4150
  • 浏览: 97271 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

以OO设计时的一些疑惑

OO 
阅读更多
   OO是不是好的?在OO的时候有关联的对象如何设计?不同的系统面临的问题可能大为不同,则解决的方式也各异。最近做项目的过程中产生了一个疑惑,以前没怎么注意过,但这次却让我相当郁闷。具体如下:

    举例:
产品Product,企业Company,ProductRoom为用于关联企业Company和产品Product的对象。如果以面向对象的方式和松散耦合的原则设计的话,Company和Product将没有任何的有关联的属性,他们通过ProductRoom相互查询。这样要想知道Product是属于哪个Company就只能通过ProductRoom而获得。

    另外,一般在数据库中ID是没有任何业务逻辑的,设为自动增长,且用于ProductRoom中将Company和Product关联的属性用的ID,则Company,Product的ID都存在于ProductRoom中。

    每个产品都是属于某企业(Company)的,所以产品(Product)在增加的时候同样要加入到产品库中(ProductRoom),但是由于产品的ID是自动增长的,那么在产品(Product)存入数据库之前是无法知道其ID的,那么ProductRoom如何获取产品(Product)的ID是非常重要的。但如果得不到产品(Product)的ID,由于产品(Product)中没有任何可以知道其归属的属性,所以产品(Product)将不属于任何企业。这是非常严重的。

    这些问题是我最近做项目碰到的,由于前期是像上边说的那样设计的低耦合的对象,在后来开发中发现了严重的问题。于是我在产品(Product)中增加了一个企业ID的属性,这样不但查询时方便,之前说的那个问题也轻松解决。所以我觉得设计对象不是纯OO就好,稍微有些关联不但能提高效率还能解决可能很严重的问题。


    问题已经解决,这次的收获不小。在设计对象的时候不要死抱着OO不放,要灵活应对。机械的运用不如不用。
分享到:
评论
4 楼 A.Sphinx 2007-07-16  
OO更多是些思想,思想只能在潜移默化中引导行程和方向,而非具体实用工具。万事灵活处理为好,不应拘泥于一些概念和方法。
3 楼 dovecat 2007-04-27  
解耦......不该是这样解的吧?似乎用的场所就不...
2 楼 lane_cn 2007-04-26  
所谓的“解耦”并不是简单的在两个类之间搞一个传声筒。
1 楼 抛出异常的爱 2007-04-26  
xj4150 写道
   OO是不是好的?在OO的时候有关联的对象如何设计?不同的系统面临的问题可能大为不同,则解决的方式也各异。最近做项目的过程中产生了一个疑惑,以前没怎么注意过,但这次却让我相当郁闷。具体如下:

    举例:
产品Product,企业Company,ProductRoom为用于关联企业Company和产品Product的对象。如果以面向对象的方式和松散耦合的原则设计的话,Company和Product将没有任何的有关联的属性,他们通过ProductRoom相互查询。这样要想知道Product是属于哪个Company就只能通过ProductRoom而获得。

    另外,一般在数据库中ID是没有任何业务逻辑的,设为自动增长,且用于ProductRoom中将Company和Product关联的属性用的ID,则Company,Product的ID都存在于ProductRoom中。

    每个产品都是属于某企业(Company)的,所以产品(Product)在增加的时候同样要加入到产品库中(ProductRoom),但是由于产品的ID是自动增长的,那么在产品(Product)存入数据库之前是无法知道其ID的,那么ProductRoom如何获取产品(Product)的ID是非常重要的。但如果得不到产品(Product)的ID,由于产品(Product)中没有任何可以知道其归属的属性,所以产品(Product)将不属于任何企业。这是非常严重的。

    这些问题是我最近做项目碰到的,由于前期是像上边说的那样设计的低耦合的对象,在后来开发中发现了严重的问题。于是我在产品(Product)中增加了一个企业ID的属性,这样不但查询时方便,之前说的那个问题也轻松解决。所以我觉得设计对象不是纯OO就好,稍微有些关联不但能提高效率还能解决可能很严重的问题。不知道各位同仁在这方面是怎么想的,讨论一下!



OO的目标模拟人类思考方式写代码读代码

你说的问题明明是
由于你考虑了一种机械的OO原则
而非OO的本质。
ProductRoom在现实中会存在么?
他的功能你都无法正确定义。。。
所以才有如上的麻烦。。。

记住OO的本质是人类考虑方式。
而且会有适当的冗余
你认为产品上会不印厂家名称么?

相关推荐

    OO设计原则 -- OO设计的 DIP依赖倒置原则

    ### OO设计原则 -- OO设计的 DIP依赖倒置原则 #### 概述 在软件工程领域,特别是面向对象设计中,依赖倒置原则(Dependency Inversion Principle, DIP)是六大设计原则之一,由著名软件架构师Robert C. Martin提出...

    OO设计原则总结

    ### OO设计原则总结 #### 什么是设计原则? 设计原则是一系列指导软件开发的基本准则,遵循这些原则可以帮助开发者构建出更加灵活、易于维护和扩展的软件系统。这些原则旨在解决常见的软件设计问题,如耦合度高、...

    OO设计原则-里氏替换原则

    ### OO设计原则——里氏替换原则详解 #### 一、引言 面向对象设计原则(Object-Oriented Design Principles)是一套指导软件开发者如何更好地设计类、接口等面向对象元素的原则集合,旨在提高代码的可复用性、可...

    设计模式——可复用的OO软件

    设计模式——可复用的OO软件

    OO中对于23种设计模式的整理

    OO 中的 23 种设计模式的整理 在面向对象编程(Object-Oriented Programming,OO)中,设计模式(Design Pattern)是指在软件设计中普遍存在的问题和解决方案的总结。OO 中的 23 种设计模式是指 GoF(Gang of Four...

    OO设计五个原则.pdf

    《OO设计五个原则》深入探讨了面向对象设计(Object-Oriented Design,简称OO设计)中的五大核心原则,这些原则是软件工程领域公认的基石,旨在提高软件系统的稳定性、可维护性和可扩展性。本文将详细解析这五大原则...

    23种设计模式,OO思想

    标题和描述中提到的“23种设计模式,OO思想”,是软件工程领域的一个核心概念,尤其是对于面向对象编程(Object-Oriented Programming,简称OO)的深入理解和实践至关重要。设计模式是由Erich Gamma、Richard Helm、...

    面向对象编程,OO设计的五大原则

    这意味着一个模块的行为可以在不修改源代码的情况下进行扩展,以适应新的需求。 **解释**:开放封闭原则提倡使用抽象(如接口或抽象类)来定义模块之间的交互,而具体实现则可以通过继承或组合来完成。这种方式使得...

    OOALV常用功能完整简例

    整体来说,OOALV的使用涉及到SAP ABAP中的一些高级编程概念,包括面向对象编程、动态程序设计、数据表的定义和查询等。在实际应用中,掌握这些知识点对于开发高效、用户友好的报表系统至关重要。OOALV的完整使用还...

    OO与设计模式

    软件工程软考认证,Java与设计模式,下午必考题,24种设计模式

    OO设计原则总结.doc

    ### OO设计原则精要解析 #### 封装变化:Encapsulate what varies 在软件设计中,变化是不可避免的。封装变化原则强调将系统中易变的部分与不变的部分分离,通过封装变动点,使得系统其他部分不受其影响,从而保持...

    《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导

    第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...

    实战OO的pdf自留备份

    《实战OO》是一本深入探讨面向对象(Object-Oriented, OO)编程技术的书籍,主要针对软件开发人员,特别是那些关注于软件设计流程和优化的开发者。此书的PDF版本是作者或读者为了个人学习和参考而留存的备份,包含了...

    23个设计模式标准OO结构

    结构型设计模式关注于如何组合现有的类和对象以创建更复杂的结构。它们提供了使用对象的新方式,有时可以减少类之间的耦合。常见的结构型模式包括: 1. 适配器模式(Adapter):将一个类的接口转换成客户希望的另一...

    KWIC oo设计java源码

    "KWIC oo设计java源码" 这个标题表明我们要讨论的是一个使用面向对象(OO)设计原则来解决“关键词上下文”(KEY WORD IN CONTEXT,简称KWIC)问题的Java源代码项目。KWIC是一种文本处理技术,常用于信息检索、文本...

    ABAP OOALV学习文档

    ### ABAP OOALV 学习文档详析 #### 一、ABAP OOALV 概述 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种用于SAP系统的高级...在未来的工作中,这些知识将帮助开发者更高效地完成报表设计任务。

    java oo 设计原则

    Java面向对象设计原则是软件开发中的基石,它们指导着我们编写出高质量、可维护和可扩展的代码。这些原则包括单一职责原则(SRP)、不要重复代码原则(DRY)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)以及...

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    以下是关于SAP ABAP和OOALV的一些关键知识点: 1. **SAP ABAP概述**:SAP ABAP(Advanced Business Application Programming)是SAP公司的主要编程语言,用于开发和自定义SAP R/3和SAP NetWeaver系统。它提供了各种...

    面向对象需求分析(OO RES)

    在数据模型设计中,OO RES 方法被用来设计钻前基本信息、钻前工程工作内容、钻杆排运行记录等数据模型。这些数据模型将被用于存储和管理钻前工程系统的数据。 在业务流程设计中,OO RES 方法被用来设计钻前工程系统...

Global site tag (gtag.js) - Google Analytics