首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重构一个繁琐的数据结构

约束及需求     以下约束是系统中已经存在的必要的约束,不可绕开这些约束而进行代码的开发。 1.项目中,有许多的实体类,都含有一种多叉树的关系和逻辑。...这个约束产生的主要是原因是:一:使用了CSLA作为实现分布式应用的框架,所有实体集合,都需要继承BusinessListBase。...而对这个集合中的实体进行操作,经常会引起该实体的状态的改变;二:目前的OpenExpressApp框架中,要求实体直接绑定到表示层,而不能对它进行转换,如使用“ViewModel”。...另外,我在这里定义的这些集合,都是一个泛型和一个非泛型配合。这是因为代码的实现是在OpenExpressApp框架中,而在框架中实体类的操作有时候是针对泛型实体,有时候却针对非泛型实体。...部分实现代码     首先,有树的遍历操作,自然先实现这个。这里使用两个静态方法对已经建立关系的树进行遍历,一个深度遍历使用栈,一个广度遍历使用队列。代码就不贴了,太占空间。 ?

783100

ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射

实体继承是基于OO和关系型数据库软件系统设计中的一个重要主题。本文通过基于NBear的实例解析ORM中的实体继承体系映射的方方面面。 本文涉及的内容包括: 1. 单表继承体系 2....Parent和AnotherParent,Child实体同时从两个基类继承。...,请注意以上代码中的Child的定义,此时,Child没有从Parent和AnotherParent继承,因为,实际上,对应于ChildTable的字段的只有现在的Child实体包含的ID和Birthday...其次,接口描述的是一种契约,换句话说,以仅仅包含属性的接口为例,假设有一个包含字段A,B的接口,那么,一个实体继承这个接口,意味着,这个实体对应的数据表包含相同类型的A,B字段。 ...我们常常发现,当按照传统的单继承的思路来设计继承体系时,尤其是,当脑袋中一直包含着让模型更适合使用ORM框架来持久化时,我们往往会忽略接口,而过度依赖基类继承。

2.5K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Apriso开发葵花宝典之九 Project篇

    Process builder中的项目Project利用代码可重用性和类似于继承的机制。Project的层次结构首先创建一个根项目,其中包含系统的所有可重用部分。其他项目继承根项目的特性。...如下图 项目A是一个根项目,它包含整个项目中共享的所有实体,并充当一个框架中所有引用的项目。当项目B和项目C参考项目A时, 它们继承了项目A中创建的功能。...意味着项目B和项目C可以不需要再次定义这些功能。您可以重用这些实体,当然也还可以自定义它们。类似的逻辑适用于项目D、项目E和项目F。 对项目A所做的更改会产生影响所有引用的项目。...上图还说明了正确的部署顺序,首先需要部署项目A,因为它被所有项目继承和引用。...6、不要在一个模块中保留太多的实体,以避免移动模块、创建包和项管理时出现问题 7、拆分大项目的步骤: 创建一个新项目A 从大项目B中复制一个新项目C 从C项目中选择需要迁移的项移动Move到新项目A

    23210

    Rafy(原OEA)领域实体框架 2.22.2067 发布!

    08104816-68bbd9d568c049c08150b6cc83d1ac15.gif 发布内容 注意,本次发布,只包含 Rafy 框架中的领域实体框架及相关文档。...实体基类的设计支持关系的延迟加载、自动冗余属性、大对象属性、数据绑定、树型实体等。 实体使用了自定义属性系统(托管属性框架)。这使得运行时可以不再使用反射,而是使用内置的属性管理方式,运行效率更高。...Rafy 框架的快速开发思想之一是支持默认值,尽量少使用配置。在必要时,仅需非常少的配置即可达到运行时的灵活变化。 •    稳定、质量有保障 领域实体框架的代码行有 4 万多行。...优势 与 EF、NH 等传统 ORM 框架相比,使用 Rafy 领域实体框架的优势在于: 传统 ORM 只是为了解决面向对象与关系数据库的映射,而 Rafy 解决的是领域实体与关系数据库的映射。...(面向对象的映射解决的是一般性的实体关系到数据库的映射,包含:一对多、一对一、多对多、继承。而领域实体的映射,则专注于领域驱动设计中的继承关系、聚合关系、引用关系。

    2K100

    架构六大思维养成记

    按照正常的思考方式,我写一个A类需要依赖B类,那么首先我要先定义出这个B类,比如定义出B类的方法等,然后我再写A类,这时的顺序是B->A。...业务实体这一层中封装的是整个系统的关键业务逻辑,一个实体能是一个带有方法的对象,或者是一系列数据结构和函数,只要这个实体能够被不同的应用程序使用即可。...下面这张图是我从网络上找的,它所展现的这种形式就是我们进行事件风暴工作坊期间的产出,通过这种工作坊把业务和研发人员拉在了一起,冲破了业务和研发人员之间的”那堵墙“。 ?...这也是为什么有很多面向对象大师都提倡使用组合优于使用继承的原因之一。但是呢,这也不是说继承就是那么的”邪恶“,一定不是这样的,我们要在正确的上下文中来判断使用继承或者组合。...继承和组合都是对象之间交互的方式,只不过呀,继承更强调了一种新的已知对象,而组合呢,表达对象之间交互的“味道更浓”。 另外,当我们使用组合的时候,我们会用一个类来构建其它的类。

    59810

    推荐:Mac下高效静态代码分析神器Unstand详解

    层级关系视图分类: 1.Butterfly:如果两个实体间存在关系,就显示这两个实体间的调用和被调用关系;如下图为Activity中的一个方法的关系图: ?...2.Calls:展示从你选择的这个方法开始的整个调用链条; ? 3.Called By:展示了这个实体被哪些代码调用,这个结构图是从底部向上看或者从右到左看; ?...4.Calls Relationship/Calledby Relationship:展示了两个实体之间的调用和被调用关系,操作方法:首先右键你要选择的第一个实体,然后点击另一个你要选择的实体,如果选择错误...结构关系视图分类: 1.Graph Architecture:展示一个框架节点的结构关系; 2.Declaration:展示一个实体的结构关系,例如:展示参数,则返回类型和被调用函数,对于类,则展示私有成员变量...(谁继承这个类,谁基于这个类) 3.Parent Declaration:展示这个实体在哪里被声明了的结构关系; 4.Declaration File:展示所选的文件中所有被定义的实体(例如函数,类型,

    2.5K10

    如何在只有词典的情况下提升NER落地效果

    今天介绍一个论文autoner[1],主要是为了探索如何在只有词典的情况下,提升NER实际落地效果; 首先,如果手中含有词典,常规操作就是远程监督打标数据,然后做NER; 远程监督一个比较常见的操作就是使用我们手中的字典...针对这个问题,本文提出了一种比较新的标注框架,简单来讲就是在这新的框架中,不去预测单个的token的类别,而是去判断两个相邻的tokens是不是在同一个实体中被tied; 上面只是我自己简单的分类,其实存在的两个问题和两种解决架构是相互融合在一起的...对于这些漏网之鱼的实体,我们的策略是这样的。 首先通过AutoPhrase从文中挖掘出来高质量短语,然后统一赋值为unknown type,也就是未知类型。 1....我们先假设我们使用{I;O;B;E;S}的标注形式; 第一,对于某个token,如果它对应到了已知类型中的某一个或者多个实体,那么按照对应的位置直接标记上,不要漏掉;也就是说{I;B;E;S}和对应的一个或者多个实体类型对上标...; 第二对于对于某个token,如果属于未知类型,那么对应的这个token就需要把所有已知实体类型(区别于上面的一个或者多个已知实体类型)和 {I, O, B, E, S}对应的打标上; 注意,这里并没有使用未知实体类型

    1.4K10

    Rafy 领域实体框架示例(1) - 转换传统三层应用程序

    Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三层架构应用程序...——“服装进销存”系统,来讲解如何使用 Rafy 领域实体框架进行数据库应用程序的快速开发,以及替换为使用 Rafy 框架后带来的一些新功能。...一些系统虽然写着使用三层架构,但是金玉其外,败絮其中,看上去非常正式的系统,一打开源码,界面层代码中就可以看到直接编写的 SQL 语句。...关于哪些关系应该使用组合关系来进行设计,大家可以查看 Rafy 用户向导文档中的“领域实体框架/领域实体/实体关系”章节。 2....(在变更每一个实体时,原代码中所有的 BLL 查询,都需要在实体仓库中编写相关的代码支持;业务逻辑则需要编写领域服务) 实体的转换分为以下几类: 无关系实体的转换 有关系实体的转换 组合实体的转换 5.

    1.1K50

    《Entity Framework 6 Recipes》翻译系列 (1) —–第一章 开始使用实体框架之历史和框架简述「建议收藏」

    不幸的是,它在面向对象继承和高度标准化的关系型数据库中产生了一个失配(阻抗失配,微软的安德斯.海尔斯伯格C#之父>可能会这样叫它)。   ...使用实体框架,我们能在设计器或是代码中直接对领域实体类进行建模。还能建立实体类之间的关系。...模型   实体框架是一个强烈关注建模的技术,当你使用实体框架建模时,你会看到很多从之前的技术和模式继承下来的似曾相识的符号。比如,一个相似的实体关系图和广泛采用的概念、逻辑、及物理分层方法。   ...实体框架创建的模型是一个名叫实体数据模型(EDM)的模型,它允许你在编码时使用强类型的实体类,不是关系型数据库中的结构和对象。...根据你如何使用实体框架,概念层能通过设计器和代码来建模。一旦做出决定,你可以使用逆向工程从一个已有的数据库中建模,或借助设计器和大量的工具能通过代码建模,以及使用实体框架来生成数据库。

    1.4K20

    Entity Framework简介

    可以将数据作为业务对象和实体进行操作,使用LINQ进行查询,使用C#进行操作和检索。...2.Model First Model First 允许我们使用实体设计器在空模型中创建模型实体,及其关系和继承层次结构,然后创建数据库。...优缺点如下: 无法控制实体和数据库,因为自动生成的代码难以修改,但是对于小型且简单的项目,它仍行之有效; 在实体中添加额外的功能,不得不修改T4模板或者使用部分类来完成; 数据库模型的更改不是最佳选择...Data First Data First 使我们能够从现有数据库创建模型,减少了自动生成代码所需编写的代码量,也限制了我们使用生成代码的结构。...优缺点如下: 如果已有DBA设计的数据来单独开发或已存在数据库,将作为首选 通过EDM向导为我们创建实体、关系和继承层次结构,修改映射后还可以生成实体; 要在实体中添加额外的功能,必须通过T4修改模板或者使用部分类

    1.8K10

    一步一步学Linq to sql(八):继承与关系

    实体继承的使用  定义好继承的实体之后,我们就可以使用了。...删除:通过TopicID插入一条记录,然后删除已经之前的记录。 然后再次通过查询查看数据结果。 ? 实体关系的定义  比如我们的论坛分类表和论坛版块表之间就有关系,这种关系是1对多的关系。...也就是说一个论坛分类可能有多个论坛版块,这是很常见的。定义实体关系的优势在于,我们无须显式作连接操作就能处理关系表的条件。...实体关系的使用 好了,现在我们就可以在查询句法中直接关联表了(数据库中不一定要设置表的外键关系): /////查看分类 var queryBoard =...; ctx.BoardCategories.InsertOnSubmit(dbcat); ctx.SubmitChanges(); 总结  现在对于继承和关系有了初步的了解和使用

    38410

    了解这些软件设计思想,你的思维至少上升一个段位

    首先要跟大家说明的是,设计模式其实不是一项新技术,而是众多软件开发人员经过相当长的一段时间的试用和试错总结出来的一套软件设计开发实践方案,学习这些知识有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计...同时,应该注意类过多的继承,例如 A 类继承自 B 类,B 类 继承自 C 类,C 类继承 D 类,这种场景下,第一:逻辑很可能非常复杂,代码可读性可能很差,第二种可能会出现方法名或者属性名冲突。...因此,大家在使用类继承操作时,一定要谨慎处理,最好的情况下是一层关系继承,这样即使出现问题了,也好排查,范围可控;继承关系多了,反而代码变的非常复杂,每个方法逻辑都需要一一梳理清楚,你才敢去下手,这种情况下...举个例子,例如我们常常使用的MVC框架,在Service层通常会先编写接口类,然后在编写服务实现类,这就是典型的面向接口编程,这种方案有哪些好处呢?...2.5、接口隔离原则 接口隔离原则的意思是:尽量将一个接口拆的更细,使用多个隔离的接口,比使用单个接口要好。 这个原则基本上是从大型软件架构出发、便于升级和维护的思想诞生出来的。

    30120

    一文聊透软件设计模式这件事儿

    首先要跟大家说明的是,设计模式其实不是一项新技术,而是众多软件开发人员经过相当长的一段时间的试用和试错总结出来的一套软件设计开发实践方案,学习这些知识有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计...同时,应该注意类过多的继承,例如 A 类继承自 B 类,B 类 继承自 C 类,C 类继承 D 类,这种场景下,第一:逻辑很可能非常复杂,代码可读性可能很差,第二种可能会出现方法名或者属性名冲突。...因此,大家在使用类继承操作时,一定要谨慎处理,最好的情况下是一层关系继承,这样即使出现问题了,也好排查,范围可控;继承关系多了,反而代码变的非常复杂,每个方法逻辑都需要一一梳理清楚,你才敢去下手,这种情况下...举个例子,例如我们常常使用的MVC框架,在Service层通常会先编写接口类,然后在编写服务实现类,这就是典型的面向接口编程,这种方案有哪些好处呢?...2.5、接口隔离原则 接口隔离原则的意思是:尽量将一个接口拆的更细,使用多个隔离的接口,比使用单个接口要好。 这个原则基本上是从大型软件架构出发、便于升级和维护的思想诞生出来的。

    22230

    了解这些软件设计思想,你的思维至少上升一个段位!

    首先要跟大家说明的是,设计模式其实不是一项新技术,而是众多软件开发人员经过相当长的一段时间的试用和试错总结出来的一套软件设计开发实践方案,学习这些知识有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计...同时,应该注意类过多的继承,例如 A 类继承自 B 类,B 类 继承自 C 类,C 类继承 D 类,这种场景下,第一:逻辑很可能非常复杂,代码可读性可能很差,第二种可能会出现方法名或者属性名冲突。...因此,大家在使用类继承操作时,一定要谨慎处理,最好的情况下是一层关系继承,这样即使出现问题了,也好排查,范围可控;继承关系多了,反而代码变的非常复杂,每个方法逻辑都需要一一梳理清楚,你才敢去下手,这种情况下...举个例子,例如我们常常使用的MVC框架,在Service层通常会先编写接口类,然后在编写服务实现类,这就是典型的面向接口编程,这种方案有哪些好处呢?...2.5、接口隔离原则 接口隔离原则的意思是:尽量将一个接口拆的更细,使用多个隔离的接口,比使用单个接口要好。 这个原则基本上是从大型软件架构出发、便于升级和维护的思想诞生出来的。

    74330

    EntityFramework Core 学习扫盲

    添加实体和映射数据库 使用EF CORE中添加实体,约束属性和关系,最后将其映射到数据库中的方式有两种,一种是Data Annotations,另一种是Fluent Api,这两种方式并没有优劣之分,全凭开发者喜好和需求...当开发者需要进行自定义修改名称时( 比如每种关系型数据库的命名规则不一样,虽然笔者一直喜欢使用帕斯卡命名以保持和项目代码结构中的统一),可以使用以下的方式。...继承 继承通常被用来控制实体类接口如何映射到数据库表结构中。在EF CORE 当前版本中,TPC和TPT暂不被支持,TPH是默认且唯一的继承方式。...以下内容用代码的方式给出了一对一,一对多和多对多的关系,两边关系设为不可空。其实可空不可空的控制十分简单,只要注意是否需要加上IsRequired的扩展Api即可。...唯一需要注意的是,关系设置请从子端(如User和Blog呈一对多对应时,从Blog开始)开始,否则配置不慎容易出现多个外键的情况。

    9.6K90

    ORM和 Spring Data Jpa

    JPA和Hibernate的关系 JPA 是 Hibernate 的一个抽象(就像JDBC和JDBC驱动的关系); JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架,这是因为...支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型 5....JPA包含的技术 ORM 映射元数据:JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。...JPA 的 API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC 和 SQL 代码中解脱出来。...Repository 上文我们自定义的 UserDao 实现了 Repository 接口,这个 Repository 接口是什么来头呢? 首先来看 Repository 的一个继承关系图: ?

    3.4K30

    TKmybatis的框架介绍及使用方法

    大家好,又见面了,我是你们的朋友全栈君。 最近项目使用了SpringBoot+TKMytis框架,期间遇到一些问题,顺便记一下。...三、使用方法 1、tk.mybatis.mapper.common.BaseMapper, IdsMapper, MySqlMapper内方法使用说明: 从接口中我们可以看到传入的方法基本均为...不过需要注意,若传入实例化的实体类,且其中包含int属性,则构建sql语句中会将该属性包含进去,如下代码: @Data @EqualsAndHashCode(callSuper=false) @Table...2、ExampleMapper内方法使用说明: 所有方法均需要传入tk.mybatis.mapper.entity.Example, 首先进行实例化: Example example = new...userRoleService.selectByExample(example); 最终的where语句则为: ( f_user_id = “15693a6e509ee4819fcf0884ea4a7c9b

    1.1K10

    SpringDataJPA 系列之 JPA 简介

    对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。...1.1.2 为什么要有 ORM   当实现一个应用程序时(不使用 ORM),我们可能会写特别的代码,从数据库保存数据、修改数据、删除数据,而这些代码都是重复的,一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程...而使用 ORM 则会大大减少重复性代码。 1.1.3 常见 ORM 框架 Mybatis(ibatis):一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。...☞ 简单方便   JPA 的主要目标之一就是提供更加简单的编程模型:在 JPA 框架下创建实体和创建 Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity...☞ 高级特性   JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化

    4.4K20

    MyBatis迷信者,清醒点!

    业务场景 本文用的实例包括4个实体类,这些实体类之间不仅存在继承关系,也存在复杂的关联关系。...上面4个持久化类之间的继承关系是:Person派生出了Employee和Customer,而Employee又派生出了Manager。...上面4个实体之间的关联关系是:Employee和Manager之间存在双向的N-1关联关系,Employee和Customer之间存在双向的1-N关联关系。 图1显示了这4个实体之间的关系。 ?...图1 4个实体之间的关联、继承关系 上面4个实体中,Person实体包含了一个Address复合属性,Address类比较简单,它就是一个普通的JavaBean。...(c.getName())); 从上面代码可以看到,程序既需要利用几个实体之间的关联关系,还要利用实体之间的继承关系。

    85130
    领券