当前位置: 首页 > news >正文

网站 云建站系统安装wordpress

网站 云建站,系统安装wordpress,库房出入库管理软件,苏州专业做网站较好的公司有哪些内外网逻辑隔离物理隔离在一个设计模式课程中#xff0c;我对建模域逻辑进行了有趣的讨论。 具体来说#xff0c;它是关于隔离域逻辑的 。 一个应用程序通常分为三个部分#xff1a; 演示#xff08;例如桌面GUI#xff0c;浏览器#xff0c;Web服务#xff09; 域逻辑… 内外网逻辑隔离物理隔离 在一个设计模式课程中我对建模域逻辑进行了有趣的讨论。 具体来说它是关于隔离域逻辑的 。 一个应用程序通常分为三个部分 演示例如桌面GUI浏览器Web服务 域逻辑 基础架构例如持久性存储电子邮件 该类发现有趣的是依赖性箭头指向域逻辑部分。 他们问“该图是否故意弄错了 域逻辑部分不应该依赖于持久性存储吗” 这是一个很大的问题。 我想在这里分享和发布讨论和解释。 经常被误解 大多数开发人员通常都会想到这种误解。 这种误解在很大程度上是由于操作顺序。 它通常以表示层中的触发器例如用户单击按钮或链接开始然后在域逻辑层中调用某些内容然后在基础结构层中调用某些内容例如更新数据库表记录。 尽管这是正确的操作顺序但是域逻辑层的实现方式还是有些微妙的。 这与依赖倒置有关。 依赖倒置原则 域逻辑层可能需要基础结构层提供的某些内容例如某种从持久性存储中检索的访问形式。 通常的模式是DAO和存储库。 在这里我不会解释这两种模式。 相反我要指出的是接口定义位于域逻辑层中而其实现则位于另一个单独的层中。 将DAO和存储库接口定义放在域逻辑层中意味着它是由域逻辑层定义的。 它决定了需要哪种方法以及期望哪种返回类型。 这也标志着域逻辑的边界。 接口和实现之间的分离可能是微妙的但很关键。 仅放置接口定义就可以使域逻辑部分不受基础结构细节的影响并允许对其进行单元测试而无需实际实现。 在单元测试期间接口可以具有模拟实现。 这种细微的差异在快速验证开发团队对业务规则的理解方面有很大的不同。 这种分离是运行中经典的依赖反转原理 。 域逻辑高级模块不应依赖于DAO和存储库实现低级模块。 两者都应依赖抽象。 域逻辑定义了抽象并且基础结构实现依赖于这些抽象。 我见过的大多数新手团队都将DAO和存储库接口以及其特定于基础结构的实现放在一起。 例如假设我们有一个StudentRepository及其特定于JPA的实现StudentJpaRepository 。 我通常会发现新手团队将它们放在相同的程序包中。 这很好因为应用程序仍将成功编译。 但是这种分离已经消失了领域逻辑也不再分离。 现在我已经解释了域逻辑部分为何以及如何不依赖于基础结构部分我想谈一谈演示部分如何意外地与域逻辑纠缠在一起。 分开的演讲 我在新手团队中经常看到的另一件事是他们最终如何将自己的领域逻辑与他们的演示文稿纠缠在一起。 这导致这种讨厌的循环依赖。 这种循环依赖性比物理依赖性更逻辑。 这使得检测和预防变得更加困难。 我不会在这里使用丰富的GUI演示示例因为Martin Fowler已经在它上面写了一篇很棒的文章 。 相反我将使用基于Web浏览器的演示作为示例。 大多数基于Web的系统都将使用Web框架进行演示。 这些框架通常实现某种形式的MVC模型-视图-控制器。 通常使用的模型直接来自领域逻辑部分。 不幸的是大多数MVC框架都需要一些有关模型的知识。 在Java世界中大多数MVC框架都要求模型遵循JavaBean约定。 具体来说它要求模型具有公共零参数构造函数getter和setter。 零参数构造函数和设置器用于将参数从HTTP POST自动绑定到模型。 吸气剂用于在视图中渲染模型。 由于演示文稿中使用的MVC框架暗含要求因此开发人员将向其所有域实体添加公共零参数构造函数getter和setter。 他们会证明这是必需的。 不幸的是这妨碍了实现域逻辑。 它与演示文稿纠缠在一起。 更糟糕的是我发现域实体被发出HTML编码的字符串例如具有小于和大于符号HTML编码HTML代码和XML的代码污染了这仅仅是因为表现形式。 如果可以将您的域实体实现为JavaBean那么可以直接在演示文稿中使用它。 但是如果域逻辑变得更加复杂并且要求域实体失去其JavaBean风格例如不再有公共的零参数构造函数不再有设置器那么建议域逻辑部分实现域逻辑并通过创建另一个JavaBean对象来满足表示部分的要求以满足其MVC需求。 我经常使用的一个示例是用于验证用户身份的UserAccount 。 在大多数情况下当用户希望更改密码时也需要旧密码。 这有助于防止未经授权的密码更改。 下面的代码清楚地显示了这一点。 public class UserAccount {...public void changePassword(String oldPassword, String newPassword) {…} } 但这并不遵循JavaBean约定。 而且如果MVC表示框架无法与changePassword方法配合使用那么天真的方法将是删除错误的方法并添加setPassword方法如下所示。 这削弱了域逻辑的隔离性并导致团队的其他成员在各处实现它。 public class UserAccount {...public void setPassword(String password) {…} } 对于开发人员而言重要的是要了解表示取决于域逻辑。 而并非相反。 如果演示文稿有需求例如JavaBean约定则它不应具有域逻辑。 相反演示文稿应创建具有相应域实体知识的其他类例如JavaBean。 但是不幸的是我仍然看到许多团队仅仅因为表示而迫使他们的域实体看起来像JavaBeans或者更糟的是让域实体创建JavaBeans例如DTO用于表示目的。 安排提示 这是安排您的应用程序的提示。 将域实体和存储库保存在一个程序包中。 将您的存储库和其他基础结构实现保存在单独的程序包中。 将与演示文稿相关的类放在自己的程序包中。 请注意哪个程序包取决于哪个程序包。 最好将包含域逻辑的包放在所有组件的中心。 其他一切都取决于它。 使用Java时程序包将如下所示 com.acme.myapp.context1.domain.model 在此处保留您的域实体值对象和存储库仅接口定义 com.acme.myapp.context1.infrastructure.persistence.jpa 将基于JPA的存储库和其他与JPA持久性相关的实现放在此处 com.acme.myapp.context1.infrastructure.persistence.jdbc 将基于JDBC的存储库和其他与JDBC持久性相关的实现放在此处 com.acme.myapp.context1.presentation.web 将您的Web / MVC演示组件放在此处。 请注意我使用了context1 因为在给定的应用程序或系统中可能有多个上下文或子系统。 我将在以后的文章中讨论有关具有多个上下文和具有多个模型的信息。 目前为止就这样了。 我希望这个简短的解释可以为那些想知道为什么以某种方式排列和拆分代码的人提供一些启示。 感谢Juno Aliento在这个有趣的讨论中为我的课堂提供了帮助。 节日快乐 翻译自: https://www.javacodegeeks.com/2017/01/isolating-domain-logic.html内外网逻辑隔离物理隔离
http://www.huolong8.cn/news/13873/

相关文章:

  • 网站采编队伍建设2022最新国内新闻50条简短
  • 微网站后台怎么查询网站的外链
  • 玉林市住房和城乡建设厅网站潍坊做企业手机版网站
  • 网站(建设)安全自查报告ui设计难学么
  • 有哪些做留学资讯的网站检测 网站优化
  • 亳州蒙城网站建设哪里做网站最好网站
  • 高端品牌网站建设费用天津网站推广外包
  • 做百度网站每年的费用多少钱wordpress约课系统
  • 镇江专业网站制作简单的网站建设公司的模板
  • 手机微信可以做网站吗大连是谁建设的
  • 怎么查看网站是asp还是php常见的网站空间有哪些
  • 用asp.net做网站营销型网站建设效果
  • 动易cms网站后台很慢是什么原因查备案网站备案
  • 人人做全免费网站网站权重等级
  • 新网网站负责人核验现场拍摄照片电子件赣州新闻广播
  • 假冒建设厅网站临沂建设网
  • 河北网站开发公司网站主体负责人 法人
  • 西宁做腋臭哪里北大DE网站大丰做网站的公司
  • 建设银行网站不能登录中国菲律宾签证免签吗
  • 网站制作的基本概念wordpress有一个100的缩略图
  • 网站和微信同步建设一级消防工程师考试内容
  • 中国网站建设代理项目公司网站公众号维护怎么做
  • 电商网站建设培训温州网络问政平台官网
  • 如何免费开自己的网站学校网站建设情况
  • 建设网站需申请什么资料上海公司有哪些
  • 现在.net做网站的多吗信息化建设 网站
  • 河南夏邑网站建设甘肃省住房和城乡建设部网站首页
  • 周口城乡建设网站郑州开发小程序多少钱
  • 网站建设国标行业分类网站名称跟域名
  • 集团网站建设特点助君php 免费装修网站