即使只是少量更改角度,也可能对您如何使用系统产生深远影响。
假设您正在用Java编写Web应用程序。 在系统中,您处理订单,客户和产品。 作为Web应用程序,您的类包括诸如Controller,PersonRepository,CustomerController和OrderService之类的订书钉。 您如何将课程组织成包?
有两种基本的方法来构建软件包。 您可以专注于逻辑层,例如com.brodwall.myapp.controllers,com.brodwall.myapp.domain或com.brodwall.myapp.services.customer。 或者,您可以专注于域上下文,例如com.brodwall.myapp.customer,com.brodwall.myapp.orders和com.brodwall.myapp.products。 迄今为止,第一种方法最为普遍。 在我看来,它也是最没有帮助的。
如果您围绕领域概念而不是技术层来构建软件包,则可以通过以下几种方式改变思维:
首先,也是最根本的,您的思维模型现在将与系统用户的思维模型保持一致。 如果要求您实现典型功能,那么现在很可能将重点放在系统软件包的严格子集中。 例如,向表单添加新字段将至少影响相应域概念的表示逻辑,实体和持久层。 如果您的软件包是围绕层组织的,则此更改将影响整个系统。 一句话:围绕功能而非技术组织的系统具有更高的一致性。 这个技术术语意味着一个类的大部分依赖项都位于该类附近。
其次,随着软件的发展,围绕领域概念进行组织将为您提供更多选择。 当一个程序包包含数十个类时,您可能需要将其拆分为几个程序包。 讨论本身可以启发人。 “也许我们应该将客户地址类别分离到com.brodwall.myapp.customer.address包中。 它似乎有自己的生活。” “是的,也许我们可以在需要地址的其他地方使用相同的类,例如供应商?” “很酷,那么com.brodwall.myapp.address呢?” 或者,也许您认为应该将订单状态代码和付款状态代码放在“ com.brodwall.myapp.order.codes”包中。
另一方面,您有什么选择拆分com.brodwall.myapp.controllers? 您可以为客户,订单和产品创建子包,但是这些子包可能只具有一个或两个类。
最后,也许是最有趣的是,使用领域概念进行包装可以使您根据具体情况改变设计。 也许您确实需要一个OrderService来协调订单的付款和运输,而ProductController仅需要带有存储库的基本create-retrieve-update-delete功能。 一个ProductService只会给您带来麻烦。 如果com.brodwall.myapp.services包中缺少ProductService,这可能会造成混淆,或者至少会给您带来麻烦的感觉,那就是出现了问题。 另一方面,如果com.brodwall.myapp.product程序包中没有控制器,则没关系。
而且,大多数系统都有一些不错的零件,而有些则不太好。 如果您的服务包对您不起作用,那么您将无能为力。 但是,如果“产品”程序包烂了,您可以将其丢弃并重新实现它,而不会使整个系统陷入混乱状态。
通过将实现某个功能所需的类彼此放在一起,并与实现其他功能所需的类分开,开发人员在开发一个功能时可以务实和创新,而不会负面影响其他功能。
不利的一面是,大多数开发人员对应用程序中的某些技术更满意,而对其他技术则较不满意。 围绕功能而非技术进行组织会迫使每个开发人员考虑更多的技术挑战。 有些程序员将其视为学习的动力,而其他程序员似乎宁愿不必学习新知识。
如果花我的钱来创建功能,我就知道我想要什么样的开发人员。
细微的变化会产生很大的影响。 通过围绕功能组织软件,您将获得一个更加一致的系统,可以进行扩展。 它可能会给您的开发人员带来挑战,但会降低实现功能所需的交接数量,并会挑战开发人员以改善他们正在处理的应用程序部分。
参考: Java 合伙人 Johannes Brodwall在“ 更大的盒子里的思考”博客中的更改Java包名称如何改变了我的系统架构 。

翻译自: https://www.javacodegeeks.com/2012/07/how-changing-java-package-names.html

更改Java包名称如何改变我的系统架构相关推荐

  1. java更改包名称_更改Java包名称如何改变我的系统架构

    java更改包名称 即使只是少量更改角度,也可能对您如何使用系统产生深远影响. 假设您正在用Java编写Web应用程序. 在系统中,您处理订单,客户和产品. 作为一个Web应用程序,您的类包括诸如Co ...

  2. java 正则表达式的包_用于Java包名称的Python正则表达式

    我在使用 Python确定有效的Java包名称时遇到问题.这是代码: packageName = "com.domain.lala" # valid, not rejected - ...

  3. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计 2.Java生鲜电商平台-App架构设计经验谈: ...

  4. bcedit双系统更改启动项名称_Win7下双系统修改BCD启动项名称

    Win7 下双系统修改 BCD 启动项名称 2010 年 08 月 06 日 星期五 下午 10:32 使用了启动项修复后,可能有些名称操作系统显示名称不正确,例如"早期的 Windows  ...

  5. bcedit双系统更改启动项名称_Win7/Win10双系统自动设置当前系统为默认启动项

    Win7/Win10双系统用户可能会遇到这样的困惑,就是Windows自动更新后需要重启系统来完成更新的安装,如果你当前使用的是Win7系统,设置的默认启动项为Win10系统,那么Win7系统下载更新 ...

  6. Java——包的定义及使用

    目录 1.包的定义 2.包的导入 3.系统常见包 4.总结 以下讲解的内容,概念清除即可,实际上现在使用的IDE开发工具,很多操作不需要我们手动去完成了. 1.包的定义 任何操作系统中,都有一个统一的 ...

  7. java系统架构设计,2022最新

    Java中23种设计模式的详细解析Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则(Liskov Subst ...

  8. java native 原理_一种Java+Native应用的系统架构的制作方法

    本发明涉及智能卡技术领域,特别是要求支持Java功能的智能卡领域. 背景技术: Java卡是Sun微系统为智能卡开发平台而制定的一个开放的标准.使用Java卡平台创建的智能卡上存有Java apple ...

  9. Android系统架构基本模式解析

    Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...

最新文章

  1. JS写的排序算法演示
  2. arping 帮助——翻译
  3. 安卓自动化测试——rf
  4. OpenCV展开二维相位图
  5. CentOS查看和修改PATH环境变量的方法
  6. oracle高资源消耗sql,Oracle中定位重要(消耗资源多)的SQL
  7. iOS事件的响应和传递机制
  8. 和get redis_Springboot2连接redis哨兵模式
  9. win10中关闭应用程序自动更新
  10. R语言︱list用法、批量读取、写出数据时的用法
  11. 使用 python 管理 mysql 开发工具箱 - 2
  12. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_9_等待唤醒机制代码实现_吃货类测试类...
  13. python excel数据分析师培训_从零开始学可视化数据分析师就业课程(Excel、 MySQL、Power BI、Tableau、python、R)...
  14. 电脑硬盘怎么测试软件,HD Tune pro硬盘检测工具怎么用
  15. 王者更新后苹果手机服务器维护,苹果手机不能更新王者荣耀怎么解决
  16. Flutter 数据持久化
  17. CentOS7中怎样设置静态IP
  18. flask手写汉字识别网站(已开源)
  19. 【新技能get】让App像Web一样发布新版本
  20. Android Studio Codota安装

热门文章

  1. 单列集合List的实现类
  2. java开发展望怎么写_Java开发趋势:2019年展望
  3. jdk 1.8 不可变常量_在JDK 10中不可变与不可修改
  4. java登录界面命令_Java命令行界面(第11部分):CmdLn
  5. functor_纯Java中的Functor和Monad示例
  6. web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件
  7. php cdi_Swing应用程序中的CDI事件将UI和事件处理分离
  8. drools。drools_Drools:fireAllRules,fireUntilHalt和Timers内部代码清理的详细说明
  9. c++返回指针时候注意提防_提防Java中的函数式编程!
  10. 告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递