更改Java包名称如何改变我的系统架构

即使只是少量更改角度,也可能对您如何使用系统产生深远影响。
假设您正在用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

静态属性_Java面试题—内部类和静态内部类的区别

内部类和静态内部类的区别内部类:1、内部类中的变量和方法不能声明为静态的。2、内部类实例化:B是A的内部类,实例化B:A.B b new A().new B()。3、内部类可以引用外部类的静态或者非静态属性及方法。静态内部类:1、静态…

储存与更新 access_token

做微信的项目,一开始就是 access_token 的申请,微信文档上写的比较清楚: 1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,…

Eclipse安装以及JDK环境变量配置

首先是下载Eclipse;点击链接打开Eclipse官网eclipse官网点击DownLoad Packages,注意是点击“DownLoad Packages”点击你需要的版本开始下载(一般是64bit Eclipse IDE)等待几秒钟,开始下载这样Eclipse已经下载好了&…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComplete),JPA / Hibernate(具有NxN关系…

mysql主从架构升级_实战项目——mysql主从架构的实现

一主一从1.1 环境准备:centos系统服务器2台、 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信1.2 准备步骤:1)iptables -F && s…

FastReport.Net使用:[30]对话框使用

使用对话框需要知道的地方 1.按钮的DialogResult属性。 假如DialogResult属性值为OK的按钮被点击,报表将会展现后面的对话框或者报表页;如果属性值为None,则停留在当前窗体;如果为其他值,则直接退出报表打印&#xff0…

模拟聊天室显示语句保持最新显示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>模拟聊天室显示语句保持最新显示</title> <style> *{ border-collapse: collapse; } .dialog_box{ width:400px; height: 600px; margin…

改善Java EE生产支持技能的8种方法

参与Java EE生产支持的每个人都知道这项工作可能很困难。 7/24传呼机支持&#xff0c;定期处理的多个事件和错误修复&#xff0c;来自客户和管理团队的压力&#xff0c;要求它们尽快解决生产问题并防止再次发生。 在日常工作中&#xff0c;您还必须照顾由多个IT交付团队驱动的多…

plsql连接mysql_安装了mysql和pl/sql,怎么配置让pl/sql能联接mysql数据库

64位环境下&#xff0c;使用PL/SQL Developer连接Oracle&#xff1a;•1. 下载32位Oracle InstantClient&#xff0c;并展开到某目录&#xff0c;例如C:\instantclient-basic-nt-11.2.0.2.0&#xff1b;•2. 将系统的tnsnames.ora拷贝到该目录下&#xff1b;•3. 在PLSQL Devel…

varnish基础

varnish概念 初步认识 首先来跟我学习&#xff0c;v~a~r~n~i~s~h~~ &#xff0c;学会了没有~ 当然还有很重要的一个概念&#xff0c;它是高性能缓存服务器&#xff0c;举个例子。 好比我们要去买东西&#xff0c;所有的我们需要的东西是在超市厂家生产出来的&#xff0c;我们需…

引入Spring集成

在本文中&#xff0c;我们介绍Spring Integration 。 如果您以前没有使用过Spring Integration&#xff0c;那么可能会帮助您复习Gregor Hohpe的Enterprise Integration Patterns 。 我还将推荐Josh Long 撰写的这篇出色的介绍性文章 。 上下文设置 简而言之&#xff0c; 企业…

PAT 1024. 科学计数法 (20)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法&#xff0c;其满足正则表达式[-][1-9]"."[0-9]E[-][0-9]&#xff0c;即数字的整数部分只有1位&#xff0c;小数部分至少有1位&#xff0c;该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科…

Mac上Hive环境搭建

本文介绍在Mac上搭建Hive环境。 建议首先配置好Hadoop&#xff0c;搭建与配置可以参考我之前的博文Mac Hadoop的安装与配置。 当然你也可以选择使用Docker搭建环境&#xff0c;本文不作介绍。 安装 对于MacOs&#xff0c;推荐使用HomeBrew安装hive&#xff0c;一步到位。 $ bre…

mysql+创建备份账户_mysql 添加用户,授予权限,数据库备份等 (转载)

一&#xff0c;连接MySQL格式&#xff1a;mysql -h 远程主机地址 -u 用户名 -p 回车输入密码进入&#xff1a;mysql -u root -p 回车Enter password: ,输入密码就可以进入mysql> 进入了退出命令:>exit 或者ctrlD二&#xff0c;MySQL管理与授权1.修改密码&#xff1a;格式…

分代缓存和转换

康拉德&#xff08;Konrad&#xff09;最近在我们公司的技术室中分享了有关如何完成缓存的有趣文章&#xff0c;这是一个大型的波兰社交网络nk.pl。 算法中的核心概念之一是分代缓存 &#xff08;请参阅此处或此处 &#xff09;。 基本思想是&#xff0c;对于缓存键&#xff0c…

css精灵

○ css 精灵&#xff08;Sprites&#xff09;技术利用photoshop将图片整合&#xff0c;然后用background-images&#xff0c;background-position&#xff0c;background-repeat技术&#xff0c;对图片进行精确定位。 ○ 优点&#xff1a;减少http请求数量&#xff0c;减少服务…

基于Jenkins+Gitlab的自动化部署实战

故事背景 一个中小型企业&#xff0c;是典型的互联网公司&#xff0c;当初期的时候可能运维只能标配到2~3人&#xff0c;此时随着公司的发展&#xff0c;项目会逐渐增多。前期部署项目可能都是手动的&#xff0c; 俗称“人肉部署”&#xff0c;这简直是无比的痛苦&#xff0c;不…

cmd如何刷新MySQL数据库_怎样在cmd中用命令操作MySQL数据库 需要技巧

用命令来操作MySQL是工作必备的&#xff0c;今天我就来分享一下cmd命令操作MySQL数据库的方法&#xff0c;希望有帮助。工具/材料电脑xampp操作方法01首先&#xff0c;启动MySQL服务才行哦。这里我是用xampp集成的数据库&#xff0c;方便&#xff0c;点击‘start’。02如图&…

Java顺序IO性能

许多应用程序将一系列事件记录到基于文件的存储中&#xff0c;以供以后使用。 从日志记录和审核&#xff0c;直到在事件源设计或其紧密相关的CQRS中保留事务重做日志&#xff0c;这都可以是任何东西。 Java具有多种方法&#xff0c;可以通过这些方法将文件顺序写入或重新读取。…

text段,data段,bss段,堆和栈

.bss段和.data段的区别 text段,data段,bss段,堆和栈转载于:https://www.cnblogs.com/jingzhishen/p/6203107.html