怎么将网站做成小程序,可以和外国人做朋友的网站,手机端首页设计,曲靖做网站价格领域逻辑
表模块和数据集一起工作- 先查询出一个记录集#xff0c;再根据数据集生成一个#xff08;如合同#xff09;对象#xff0c;然后调用合同对象的方法。 这看起来很想service查询出一个对象#xff0c;但调用的是对象的方法#xff0c;这看起来像是充血模型…领域逻辑
表模块和数据集一起工作- 先查询出一个记录集再根据数据集生成一个如合同对象然后调用合同对象的方法。 这看起来很想service查询出一个对象但调用的是对象的方法这看起来像是充血模型如果getter和setter也算那贫血模型才算不然我们是调用service的方法。当然service是把充血模型拆出来了。说到底这个时候查询的方法反而不像是在整个领域模型中了 那如果我们灵活些把出了查询的mapper以外的部分当作额是不是就是表模块这种组织形式了呢 表模块是事务脚本和领域模型的一个中间地带。它围绕表而非直接围绕过程来组织领域逻辑提供了更多的结构而且更容易发现和移除冗余代码。 同领域模型相比你无法应用许多在领域模型中可以使用的组织细粒度逻辑结构的技术例如继承承、策略和其他面向对象的设计模式。 面向对象的好处是将程序结构化吗 表模块最大的优势在于与双层架构的已有代码的衔接。 双层架构、GUI程序通常设计成与sql返回的记录集工作而表模块也再记录集之上工作。 加了记录集就成三层了。相当于重构了 许多平台都使用这种开发网格尤其是微软的COM和.NET 书中并没有讨论什么是领域逻辑的复杂度为什么银行业务甚至直接用存储过程就可以那种是不复杂的业务逻辑吗企业应用经常修改算是复杂的业务逻辑吗一个事件牵扯一堆事件且经常修改算是吗
数据源层
数据源层的作用是与应用需要的基础设施的不同部分进行通信。 对web开发者而言在数据层可以编写和数据库通信的相关代码已经是很常见的应用场景了。但这里应当注意到数据源可以是任何数据来源比如其他系统如调用微服务接口 关系数据库之所以取得成功最重要的原因之一就是SQL的存在它是数据库通信标准语言。
从3.1的第二段解释为什么将sql放在单独的类中来看似乎当时后端程序猿和DBA并没有混为一谈程序员不一定擅长sqlDBA则不接触代码文中提到他们希望能得到访问数据库的sql我猜测他们只是负责管理数据库、建立库表之类的 不管怎么说对于现在的开发者而言单独一层管理sql也是个方便的选择。
行数据入口
查询语句的每一行产生一个实例。用面向对象的方式看待数据 查询出的一行不一定是一个表的吧也不一定是一个领域 #mermaid-svg-UyZbO0LNKDCrqraA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UyZbO0LNKDCrqraA .error-icon{fill:#552222;}#mermaid-svg-UyZbO0LNKDCrqraA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UyZbO0LNKDCrqraA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UyZbO0LNKDCrqraA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UyZbO0LNKDCrqraA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UyZbO0LNKDCrqraA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UyZbO0LNKDCrqraA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UyZbO0LNKDCrqraA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UyZbO0LNKDCrqraA .marker.cross{stroke:#333333;}#mermaid-svg-UyZbO0LNKDCrqraA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UyZbO0LNKDCrqraA g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-UyZbO0LNKDCrqraA g.classGroup text .title{font-weight:bolder;}#mermaid-svg-UyZbO0LNKDCrqraA .nodeLabel,#mermaid-svg-UyZbO0LNKDCrqraA .edgeLabel{color:#131300;}#mermaid-svg-UyZbO0LNKDCrqraA .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-UyZbO0LNKDCrqraA .label text{fill:#131300;}#mermaid-svg-UyZbO0LNKDCrqraA .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-UyZbO0LNKDCrqraA .classTitle{font-weight:bolder;}#mermaid-svg-UyZbO0LNKDCrqraA .node rect,#mermaid-svg-UyZbO0LNKDCrqraA .node circle,#mermaid-svg-UyZbO0LNKDCrqraA .node ellipse,#mermaid-svg-UyZbO0LNKDCrqraA .node polygon,#mermaid-svg-UyZbO0LNKDCrqraA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UyZbO0LNKDCrqraA .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-UyZbO0LNKDCrqraA g.clickable{cursor:pointer;}#mermaid-svg-UyZbO0LNKDCrqraA g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-UyZbO0LNKDCrqraA g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-UyZbO0LNKDCrqraA .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-UyZbO0LNKDCrqraA .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-UyZbO0LNKDCrqraA .dashed-line{stroke-dasharray:3;}#mermaid-svg-UyZbO0LNKDCrqraA #compositionStart,#mermaid-svg-UyZbO0LNKDCrqraA .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #compositionEnd,#mermaid-svg-UyZbO0LNKDCrqraA .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #dependencyStart,#mermaid-svg-UyZbO0LNKDCrqraA .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #dependencyStart,#mermaid-svg-UyZbO0LNKDCrqraA .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #extensionStart,#mermaid-svg-UyZbO0LNKDCrqraA .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #extensionEnd,#mermaid-svg-UyZbO0LNKDCrqraA .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #aggregationStart,#mermaid-svg-UyZbO0LNKDCrqraA .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA #aggregationEnd,#mermaid-svg-UyZbO0LNKDCrqraA .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-UyZbO0LNKDCrqraA .edgeTerminals{font-size:11px;}#mermaid-svg-UyZbO0LNKDCrqraA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PersonGateway - lastname : String - firstname : String - numberOtDependents : Integer insert() update() delete() find(id : String) findForCompany(companyID : String) 表数据入口 返回记录集
对数据库中的每个表仅仅需要一个对象来管理。 记录集是一种通用数据结构 GUI工具通常使用记录集 #mermaid-svg-o64hpt6iNcFti8b4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-o64hpt6iNcFti8b4 .error-icon{fill:#552222;}#mermaid-svg-o64hpt6iNcFti8b4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-o64hpt6iNcFti8b4 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-o64hpt6iNcFti8b4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-o64hpt6iNcFti8b4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-o64hpt6iNcFti8b4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-o64hpt6iNcFti8b4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-o64hpt6iNcFti8b4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-o64hpt6iNcFti8b4 .marker.cross{stroke:#333333;}#mermaid-svg-o64hpt6iNcFti8b4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-o64hpt6iNcFti8b4 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-o64hpt6iNcFti8b4 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-o64hpt6iNcFti8b4 .nodeLabel,#mermaid-svg-o64hpt6iNcFti8b4 .edgeLabel{color:#131300;}#mermaid-svg-o64hpt6iNcFti8b4 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-o64hpt6iNcFti8b4 .label text{fill:#131300;}#mermaid-svg-o64hpt6iNcFti8b4 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-o64hpt6iNcFti8b4 .classTitle{font-weight:bolder;}#mermaid-svg-o64hpt6iNcFti8b4 .node rect,#mermaid-svg-o64hpt6iNcFti8b4 .node circle,#mermaid-svg-o64hpt6iNcFti8b4 .node ellipse,#mermaid-svg-o64hpt6iNcFti8b4 .node polygon,#mermaid-svg-o64hpt6iNcFti8b4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-o64hpt6iNcFti8b4 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-o64hpt6iNcFti8b4 g.clickable{cursor:pointer;}#mermaid-svg-o64hpt6iNcFti8b4 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-o64hpt6iNcFti8b4 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-o64hpt6iNcFti8b4 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-o64hpt6iNcFti8b4 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-o64hpt6iNcFti8b4 .dashed-line{stroke-dasharray:3;}#mermaid-svg-o64hpt6iNcFti8b4 #compositionStart,#mermaid-svg-o64hpt6iNcFti8b4 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #compositionEnd,#mermaid-svg-o64hpt6iNcFti8b4 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #dependencyStart,#mermaid-svg-o64hpt6iNcFti8b4 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #dependencyStart,#mermaid-svg-o64hpt6iNcFti8b4 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #extensionStart,#mermaid-svg-o64hpt6iNcFti8b4 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #extensionEnd,#mermaid-svg-o64hpt6iNcFti8b4 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #aggregationStart,#mermaid-svg-o64hpt6iNcFti8b4 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 #aggregationEnd,#mermaid-svg-o64hpt6iNcFti8b4 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-o64hpt6iNcFti8b4 .edgeTerminals{font-size:11px;}#mermaid-svg-o64hpt6iNcFti8b4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PersonGateway find(id : String) findWithLastName(lastName : String) update(id : String, lastName : String, firstName : String, numberOfDependents : Integer) insert(lastName : String, firstName : String, numberOfDependants : Integer) delete(id : String) 表数据入口与记录集非常匹配这使得它们成为使用表模块的当然选择。它也是一个组织存储过程的模式。
活动记录? 在一片博客中称Active Record and Data Mapper 是ORM的两种流行的实现。
领域和数据库表一一对应?这几把讲的都是啥下面的数据映射器 从另一个角度来考虑活动记录就是从行数据入口开始然后把领域逻辑加入到类中特别是在从多个事务脚本中发现了重复代码的时候。 #mermaid-svg-GlgGPXA23atauGKv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GlgGPXA23atauGKv .error-icon{fill:#552222;}#mermaid-svg-GlgGPXA23atauGKv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GlgGPXA23atauGKv .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GlgGPXA23atauGKv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GlgGPXA23atauGKv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GlgGPXA23atauGKv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GlgGPXA23atauGKv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GlgGPXA23atauGKv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GlgGPXA23atauGKv .marker.cross{stroke:#333333;}#mermaid-svg-GlgGPXA23atauGKv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GlgGPXA23atauGKv g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-GlgGPXA23atauGKv g.classGroup text .title{font-weight:bolder;}#mermaid-svg-GlgGPXA23atauGKv .nodeLabel,#mermaid-svg-GlgGPXA23atauGKv .edgeLabel{color:#131300;}#mermaid-svg-GlgGPXA23atauGKv .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-GlgGPXA23atauGKv .label text{fill:#131300;}#mermaid-svg-GlgGPXA23atauGKv .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-GlgGPXA23atauGKv .classTitle{font-weight:bolder;}#mermaid-svg-GlgGPXA23atauGKv .node rect,#mermaid-svg-GlgGPXA23atauGKv .node circle,#mermaid-svg-GlgGPXA23atauGKv .node ellipse,#mermaid-svg-GlgGPXA23atauGKv .node polygon,#mermaid-svg-GlgGPXA23atauGKv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GlgGPXA23atauGKv .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-GlgGPXA23atauGKv g.clickable{cursor:pointer;}#mermaid-svg-GlgGPXA23atauGKv g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-GlgGPXA23atauGKv g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-GlgGPXA23atauGKv .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-GlgGPXA23atauGKv .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-GlgGPXA23atauGKv .dashed-line{stroke-dasharray:3;}#mermaid-svg-GlgGPXA23atauGKv #compositionStart,#mermaid-svg-GlgGPXA23atauGKv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #compositionEnd,#mermaid-svg-GlgGPXA23atauGKv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #dependencyStart,#mermaid-svg-GlgGPXA23atauGKv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #dependencyStart,#mermaid-svg-GlgGPXA23atauGKv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #extensionStart,#mermaid-svg-GlgGPXA23atauGKv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #extensionEnd,#mermaid-svg-GlgGPXA23atauGKv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #aggregationStart,#mermaid-svg-GlgGPXA23atauGKv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv #aggregationEnd,#mermaid-svg-GlgGPXA23atauGKv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-GlgGPXA23atauGKv .edgeTerminals{font-size:11px;}#mermaid-svg-GlgGPXA23atauGKv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Customer load(resultSet : ResultSet) delete() insert() update() checkCredit() sendBills() 数据映射器
一种更好的办法是把领域模型和数据库完金独立可以让间接层完成领域对象和数据库表之间的映射。这个数据映射器(见图3-4)处理数据库和领域模型之间所有的存取操作并且允许双方都能独立变化。这是数据库映射架构中最复杂的架构但它的好处是把两个层完全独立了。
遇事不决加一层是吧.还最复杂的架构,您前面那也配叫数据库映射架构?好吧好吧,就当他们是吧 独立变化?哦哦哦我明白了,内存改完不同步数据库,直到调用方法?看来前面的并没有getter setter这种情况了,前面的都是做某种操作的时候直接update之类来代替getter/setter?
简单的逻辑用活动记录也行,复杂的用数据映射器.其实就是加了一层 即使用数据映射器作为首选持久化机制还是可以使用数据入口来封装被视为外部接口的表或者服务。 说到最后主要还是领域模型难以持久化。看起来领域和实体实际上不是什么很匹配的概念。可能本来就是一个强调解耦一个强调关系吧 作者推崇面向对象数据库。然后是数据映射器。我不太理解都买的商业OR工具有什么 还有一种面向对象数据库风格的逻辑层如JDO 行为问题
工作单元又加了一层控制何时加载对象 领域模型关联对象延迟加载避免一次加载一批
3.3 读取数据
查找器方法 设计经验 读取冗余行也可以一次读很多行效率大于读很少的几行 join一次读取多个表可能比多次读取表更快当然MF也说了一次查询最多三到四次join 读到这一段下面说 设计一个入口获得相联结的表数据或者通过一个数据映射器用一次调用加载多个领域对象。可能数据映射器额还有上面的工作单元中间层是指内存中对象保存的数据类似于缓存层直接操作对象来改变其对应的数据库数据这样一来set方法可能其实就类似update但是直接set到数据库里工作单元相当于缓存策略里面的有中间manager管理的 毕竟这个时候MF提出的领域模型的概念似乎还没有和javabean融合没有getter一说。
3.4 结构映射模式
对象-关系映射的结构映射模式 表数据入口通常不需要 行数据入口和活动记录可能会需要一些模式 数据映射器需要全部模式。
对象和表处理“连接”关系的方法是相反的 这是范畴论的连接吗 一对多关系为例对象可以保存多个其他对象的引用列表数据库则是由多的一方保存1的一方的主键。
新出现的名词外键映射标识映射依赖映射。 可能是指关系型数据库吧。因为下面又提到了多对多关系用的关联表映射。 还是没搞懂标识域是什么一个成员变量保存外键而不是用引用
继承
单表继承 具体表继承 类表继承
单表继承一个层次中的所有类建立一个表。 说的这么玄乎结果就是一个大表把所有父类和子类的属性都放上啊。“层次”指的是从父类和它的子类啊咱对层次的理解是不是有些偏颇 #mermaid-svg-6nMEI96SSjoYmvBP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nMEI96SSjoYmvBP .error-icon{fill:#552222;}#mermaid-svg-6nMEI96SSjoYmvBP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6nMEI96SSjoYmvBP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-6nMEI96SSjoYmvBP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6nMEI96SSjoYmvBP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6nMEI96SSjoYmvBP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6nMEI96SSjoYmvBP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6nMEI96SSjoYmvBP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6nMEI96SSjoYmvBP .marker.cross{stroke:#333333;}#mermaid-svg-6nMEI96SSjoYmvBP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6nMEI96SSjoYmvBP g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-6nMEI96SSjoYmvBP g.classGroup text .title{font-weight:bolder;}#mermaid-svg-6nMEI96SSjoYmvBP .nodeLabel,#mermaid-svg-6nMEI96SSjoYmvBP .edgeLabel{color:#131300;}#mermaid-svg-6nMEI96SSjoYmvBP .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-6nMEI96SSjoYmvBP .label text{fill:#131300;}#mermaid-svg-6nMEI96SSjoYmvBP .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-6nMEI96SSjoYmvBP .classTitle{font-weight:bolder;}#mermaid-svg-6nMEI96SSjoYmvBP .node rect,#mermaid-svg-6nMEI96SSjoYmvBP .node circle,#mermaid-svg-6nMEI96SSjoYmvBP .node ellipse,#mermaid-svg-6nMEI96SSjoYmvBP .node polygon,#mermaid-svg-6nMEI96SSjoYmvBP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6nMEI96SSjoYmvBP .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-6nMEI96SSjoYmvBP g.clickable{cursor:pointer;}#mermaid-svg-6nMEI96SSjoYmvBP g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-6nMEI96SSjoYmvBP g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-6nMEI96SSjoYmvBP .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-6nMEI96SSjoYmvBP .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-6nMEI96SSjoYmvBP .dashed-line{stroke-dasharray:3;}#mermaid-svg-6nMEI96SSjoYmvBP #compositionStart,#mermaid-svg-6nMEI96SSjoYmvBP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #compositionEnd,#mermaid-svg-6nMEI96SSjoYmvBP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #dependencyStart,#mermaid-svg-6nMEI96SSjoYmvBP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #dependencyStart,#mermaid-svg-6nMEI96SSjoYmvBP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #extensionStart,#mermaid-svg-6nMEI96SSjoYmvBP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #extensionEnd,#mermaid-svg-6nMEI96SSjoYmvBP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #aggregationStart,#mermaid-svg-6nMEI96SSjoYmvBP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP #aggregationEnd,#mermaid-svg-6nMEI96SSjoYmvBP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-6nMEI96SSjoYmvBP .edgeTerminals{font-size:11px;}#mermaid-svg-6nMEI96SSjoYmvBP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Player name : String Footballer club Cricketer battingAverage : Float Bowler bowlingAverage : Float 类表继承是类和表之间最简单的关系但是它需要多个连接(join)操作来载人一个对象这样通常损失了性能。 具体表继承避免了连接操作允许从一个表中取得一个对象但是改变起来比较困难。对超类的任何改变都不得不改变所有的表(还有映射代码)。改变层次结构自身会带来更大的改变。缺乏超类表也能使主键管理十分可怕引用完整性也有问题尽管它能减少超类表中的锁争夺。 而在某些数据库中单表继承最大的弊端是浪费了空间因为每一行都必须为每种可能的子类保留一些列这就导致很多空列。然而许多数据库都能很好地压缩浪费的表空间。单表继承的另一个问题在于它的大小将成为访问的瓶颈。它最大的好处是把所有的内容都放到一起这样修改起来很容易并目避免了连接操作。 我们可以混合操作比如一些字段放在大表里一些作为附加字段。但这样设计十分复杂。 我们的实践中还有一种方法是放数据库的一列json中
映射到数据库
数据库方案是什么?是指“是否已经建立好了表”吗
也许应该关注下ORM思想的诞生这一层次 这本书还有个缺点参考书目在电子版全都没有显示出来
web表现层
输入控制器MVC中的控制器 看来model下面还有数据源层 两种模式
页面控制器为每个页面准备一个控制器为每一种动作准备一个控制器
分布策略
本地的过程调用非常快 本地接口细粒度方便拓展有些像贫血模型 远程接口粗粒度一次做很多事情减少调用次数
分布模型CORBA
因此MF认为不要分布使用对象而是用集群系统在一个cpu部署所有对象并在其他节点部署他们