![]() |
1
3
不知道在llglgen中是否可能,但是我在使用orms时通常要做的是创建一个到持久化类的接口,在您的示例iBook中。我通过包装类中的公共getter公开这个接口。这样,如果需要的话,如果需要向其字段中添加一些自定义行为,您可以按照自己的方式扩展iBook。 一般来说,我认为有三种方法可以“映射”您的ORM实体到您的域:
我不喜欢1,因为我不喜欢在应用程序中有2个映射。Dry、Kiss和Yagni都被这一切侵犯了。 我不喜欢3,因为它会使域层的任何消费层直接与ORM层对话。 …因此,我同意2,因为这似乎是3种邪恶中较小的一种;) [更新]小代码段:) 数据层中ORM生成的类:
在业务逻辑层中可以找到iBook,以及书籍包装器:
我不知道这是否是一个可识别的设计模式,但这正是我所使用的,迄今为止它工作得相当好:) |
![]() |
2
5
我从未使用过llblgen进行映射,但我使用的大多数ORM工具都生成了部分类。然后,我添加任何我想添加到单独文件中的对象的自定义代码/逻辑(这样,如果重新生成分部类,它们就不会被重写)。 似乎工作得很好。如果您没有从ORM中获得部分类,我将创建一个外观,它用业务逻辑包装您的数据对象……这样,两个类就分离了,您可以在不覆盖另一个的情况下重新生成一个。 更新 分部类支持在分部类的一个声明中实现接口,而不是在另一个声明中实现接口。如果要实现接口,可以在自定义代码部分文件中实现它。 直接从 MSDN :
相当于
|
![]() |
3
1
您感到了关系数据和对象的不同范例之间不匹配的痛苦。 我的意思是,关系数据和对象的世界是非常非常不同的。例如,在数据库中,所有数据都是公共的。在对象土地中,数据是封装的,并且非常具体地不公开。在数据库土地中,所有关系都是双向的,而在对象土地中,集合中的对象可能没有任何对其父对象的引用。在数据库领域,程序是全局的。在对象土地中,程序是包含动作数据的对象的本地程序。 由于这些原因以及更多的原因,创建表示数据库表的对象的方法从本质上来说是很痛苦的。虽然从技术上讲,它们是对象,但它们具有数据库土地的语义。如你所经历的,让他们生活在目标地,即使不是不可能的,也是很困难的。这可以称为 数据优先 . 更好的方法(在我看来)是将对象映射到数据库,而不是将数据库映射到对象。这可以称为 对象优先 ,并得到了很好的支持 NHibernate . 这种方法强调这样一个事实:数据库是 实施详细信息 一个系统,而不是一个设计原则。 我意识到这并不能明确回答你的问题,但我希望它能提供一些背景,解释为什么你很难概念化你的实体:它们首先是表,其次是实体。 |
![]() |
Montaser Majid · 用于从多行中提取单行的SQL查询 2 年前 |
![]() |
Chance · 根据Sequelize中的字段拉入特定记录/行 2 年前 |
![]() |
lambchop01 · GORM如何为相似实体之间的关系建模 2 年前 |
![]() |
Shale · 如何将此查询更改为ORM? 2 年前 |
![]() |
Daniel Morales · 替换mongo DB中的嵌入字段 2 年前 |
![]() |
Vinay P · NodeJS和ORM? 6 年前 |
![]() |
MadDoctor5813 · 在Django模型中创建“简单”字典? 6 年前 |