`
jeffen2006
  • 浏览: 259219 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个关于实体对象和值对象的困惑

阅读更多
现状:
我们现在有一个管理商家的系统,有一个商家的实体类Busi,一个商家注册方式的实体类Addmode。同时分别对应2张表。
Busi多对一关联Addmode。Addmode只有一个非主键属性type,属性值也相对固定,在数据表中只有2条记录——网站注册/代理商注册。

这种情况在我们系统中还有几个地方存在:比如投诉实体类,投诉类型实体类。

当时采用这种方式的目的是因为我们的系统有一个后台管理模块,这些类型是可以在这个管理模块进行维护的,增删操作。然后前台页面就会自动数据库中取到新的值,方便日后的维护。

困惑:
我们是采用hibernate作持久层的,我现在觉得为了一个非常简单的基本固定的属性,我们要维护有一个类、一个hbmxml文件、一个DAO接口、一个DAO实现类、一个Service接口、一个Service类,而仅仅是为了在后台可以对它进行增删,这样的成本太高了。

最近看了一些值类型的文档,感觉这个Addmode应该是属于值类型,但是又不知道怎么重构到现有项目,并且满足后台自动增删操作。

各位专家有什么好的建议?
分享到:
评论
8 楼 luojunaction 2009-05-08  
一般表的字段是不会经常添加的。。

7 楼 jeffen2006 2009-05-08  
失望,都没说到一个点上
6 楼 jeffen2006 2009-05-08  
从我们的业务看,商家注册方式Addmode,无疑是一个值对象,但我们又要后台维护这个值对象的属性。

为了简单(不要将之复杂成实体对象),只能采用非hibernate的方式了;或者将所有整个系统的此类值类型通过一个通用的实体对象统一通过hibernate解决。

5 楼 抛出异常的爱 2009-05-07  
jeffen2006 写道
现状:
我们现在有一个管理商家的系统,有一个商家的实体类Busi,一个商家注册方式的实体类Addmode。同时分别对应2张表。
Busi多对一关联Addmode。Addmode只有一个非主键属性type,属性值也相对固定,在数据表中只有2条记录——网站注册/代理商注册。

这种情况在我们系统中还有几个地方存在:比如投诉实体类,投诉类型实体类。

当时采用这种方式的目的是因为我们的系统有一个后台管理模块,这些类型是可以在这个管理模块进行维护的,增删操作。然后前台页面就会自动数据库中取到新的值,方便日后的维护。

困惑:
我们是采用hibernate作持久层的,我现在觉得为了一个非常简单的基本固定的属性,我们要维护有一个类、一个hbmxml文件、一个DAO接口、一个DAO实现类、一个Service接口、一个Service类,而仅仅是为了在后台可以对它进行增删,这样的成本太高了。

最近看了一些值类型的文档,感觉这个Addmode应该是属于值类型,但是又不知道怎么重构到现有项目,并且满足后台自动增删操作。

各位专家有什么好的建议?

如果是项目的话
增删改操作用同一个dao.....
同一个sverice
类要有多个....
在hibernate 可以自已识别object的类名与table名
4 楼 魔力猫咪 2009-05-07  
那看来是我没仔细读你的话。你认为处理代价太高。我觉得主要是你架构设计的问题。对象类本身和XML配置是必须的。然后Dao和Service是否要呢?我觉得使用一个通用Dao就可以了。你们也应该有这么一个Dao作为其他具体Dao对象的父类。你直接调这个Dao就是了。而且Service里没有任何业务,不需要存在。你这种没有任何业务,只是纯粹的仓储操作,直接调用Dao就可以了。不用僵化的单独写接口写类。
3 楼 jeffen2006 2009-05-07  
我的问题是怎么设计这类问题,我的实际业务也描述的应该比较清楚了,概念性的东西我也看过。希望实践家来解决!
2 楼 魔力猫咪 2009-05-07  
一个对象是实体还是值对象要看其所处的业务的位置。一个对象可能在一个业务中就是实体,是一个独一无二的存在,但是在另外一个业务中就是值对象。大家可以随意使用丢弃,因为值对象是不可变的。
具体情况要结合你的实际业务进行具体分析,在此无法给你太详细的建议,建议看看《领域驱动设计》中关于这两者的描述,希望对你有所帮助。
1 楼 nighthawk 2009-05-07  
他是不是值对象跟你的增删改查有什么关系?

相关推荐

    Java就业培训教程面向对象上.pdf

    在C++和Java中,我们可以定义一个窗口对象,它不仅包含属性(如大小、位置、颜色),还包含与其行为相关的方法(如Hide、Move、Minimize)。这些方法与对象本身绑定,不再需要传递对象作为参数。这体现了对象的主体...

    例解基于UML的面向对象分析与设计

    本文通过一个具体的案例,展示了如何运用统一建模语言(UML)来进行面向对象的分析与设计(OOA&D)。为了确保读者能够顺利理解文章内容,本文假设读者已经掌握了UML和面向对象的基本概念。本文的重点在于展示如何在...

    SchoolManager[实体+接口+工厂+数据库]

    在"SchoolManager"中,可能有一个`SchoolMemberFactory`,它负责根据需求创建不同类型的学校成员对象。工厂模式的好处在于它隐藏了对象创建的复杂性,使得客户端代码只需要知道如何请求对象,而无需关心对象是如何被...

    Java编程思想让很多新手止步不前,困惑已久的问题由此解开

    继承则允许一个类(子类)继承另一个类(父类)的属性和方法,这样可以实现代码重用并简化设计。多态性是指同一种行为可以有不同的表现形式,这在处理不同类型的对象时非常有用,增强了程序的灵活性。 接下来,异常...

    设计模式.可复用面向对象软件的基础

    设计模式作为软件工程领域的一个重要分支,其核心目标在于提高软件的复用性和灵活性。面向对象编程(OOP)作为一种广泛采用的软件开发方法论,在设计时面临着诸多挑战。本章节通过概述设计模式的概念及其重要性,为...

    深入理解JavaScript系列

    - **原型链查找机制**:当访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript会沿着原型链向上查找。 - **应用场景**: - **继承**:通过原型链实现对象之间的继承关系。 - **动态属性查找**:提高...

    成功读取autocad多行文字arx代码

    首先询问用户去选择一个实体并判断此实体是字符串或者字符串的派生类,若是则将打开的对象转化为AcDbMText对象指针,但在此处曾经遇到一个很大的困惑,即通过AutoCAD 2012工具栏中的“文字”图标(如下图6.2.1所示)...

    C 程序设计课件:第12章 构造函数.ppt

    在C++编程语言中,构造函数是类的一个特殊成员函数,它的主要作用是在创建对象时对对象进行初始化。第12章"构造函数"详细介绍了构造函数及其在类与对象中的应用。 首先,我们来理解类与对象的概念。类是对具有相同...

    一个月挑战C++高级技巧

    - **引用类型**:引用是C++的一个独特特性,它是变量的别名,一旦初始化后不能改变,常用于函数参数和返回值,以确保安全地传递对象。 - **布尔类型**:C++提供了bool类型,用于存储真(true)和假(false)两种...

    指针与数组

    根据C99标准,指针类型是从函数类型、对象类型或不完整类型派生出来的,它描述了一个能提供对引用类型实体引用的对象。例如,`int *p`声明了一个指针变量p,其类型是整型指针,表示p可以存储一个整型对象的地址。 ...

    WebApi接口返回值不困惑:返回值类型详解 - 文章 - 伯乐在线1

    `HttpResponseMessage` 类型允许直接构建和控制HTTP响应的每一个细节,包括状态码、头部信息和实体内容。它可以提供高度自定义的响应。例如: ```csharp [HttpGet] public ...

    Object-Oriented Design Knowledge:Principles, Heuristics And Best Practices.pdf

    《面向对象设计知识:原则、启发式方法与最佳实践》这本书由Javier Garzás和Mario Piattini主编,旨在提供一个关于微架构设计知识的统一和全面视图,深入分析主要的技术、经验和方法。 #### 二、面向对象设计的...

    ERD.PDF台湾 林伟川著

    4. **定义属性和主键**:确定每个实体的属性,并为每个实体分配一个主键。 ### 5. 关联限制条件 ER图中的关系类型受到一定的限制,主要包括: - **一对一关系**:每个实体实例只与另一个实体实例关联。 - **一对...

    数组与指针的艺术.doc

    指针类型是由函数类型、对象类型或不完整类型派生而来,它描述了一个值能提供对相应实体引用的对象。标准定义了指针类型,并规定了如何声明和使用指针。 数组与指针紧密相连,数组名通常表示数组的起始地址,因此...

    C++语言学习,新手笺言

    在C++语言学习的世界里,新手常常面临许多挑战和困惑,比如语法的复杂性、内存管理的难度以及面向对象编程的抽象概念。本资源“C++语言学习,新手笺言”旨在为初学者提供一条清晰的学习路径,帮助他们快速理解和掌握...

    2.4 张量-王森1

    这种映射遵循多重线性规则,意味着无论输入多少个向量,它都会产生一个值。因此,张量可以看作是一种算子,它对输入向量进行线性组合,生成输出值。 张量与它的分量之间存在着密切关系。张量的分量是在特定基矢下的...

    jsona:从JSON或存储的reduxObject创建简化对象的数据格式化程序,从相同的简化对象创建JSON(符合JSON API规范)

    这可能使您困惑以下问题: 如何从included数组中获得更多不方便和最优的必要实体? 如何使用键入(TypeScript,Flow)来描述来自服务器的数据? 如何在不按照规范手动组装JSON的情况下将JSON发送到服务器? Jsona...

    java与模式

    - 工厂模式(Factory Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - ...

    Java程序语言设计 课后答案

    类的继承是面向对象编程的关键概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。Java支持单继承,即一个子类只能有一个直接父类,但可以通过接口实现多继承的效果。接口是定义行为的标准,类可以实现多...

Global site tag (gtag.js) - Google Analytics