李宏毅 课程打包_按功能而不是按层打包课程

李宏毅 课程打包

大多数企业Java应用程序在设计上都有一些相似之处。 这些应用程序的打包通常由它们使用的框架(如Spring,EJB或Hibernate等)驱动。或者,您可以按功能对打包进行分组。 像任何其他有关建模的项目一样,这也不是没有任何问题。 让我们讨论一些权衡以及如何解决它们。 在本文中,我们将讨论两种方法在常见使用场景下的利弊。

逐层封装(PBL)

这是开发人员在创建企业应用程序时将其拆分为多个层(如DAO,SERVICE,VIEW等)时要做的第一件事。

当我们在不同的层使用不同的框架时,代码分离。 例如,如果我要使用Hibernate,Spring和JSF,那么我的所有Hibernate依赖代码都将在DAO层中,而JSF相关的代码将在VIEW层中。 万一我只需要在视图层或DAO层上迁移到新框架,这很好。

按功能打包(PBF)

逐功能包使用程序包来反映功能集。 它将与单个功能(仅该功能)相关的所有项目放置在单个目录/程序包中。 这导致包装具有高内聚力和高模块化性,并且包装之间的耦合最小。 紧密协作的项目彼此相邻放置。 它们不会散布到整个应用程序中。 由于一类的大部分依赖项都靠近该类,因此这也增加了一致性。

比较方法

让我在下面的维度中比较这两种方法。

1.添加新功能。

在必须将PBL代码添加到VIEW,SERVICE和DAO层的情况下,这可能很麻烦。 PBF通过将与同一功能相关的所有代码分组到一个目录中来解决此问题。

2.更改所使用的框架。

如前所述,由于所有相关代码都保存在同一位置,因此PBL使得更改框架变得更加容易。 在这里,我们确切地知道更改的范围及其影响。 对于PBF,我们需要深入研究所有功能集以查看与框架相关的类。 如果选择逐模块迁移框架模块,则可能会认为PBF比PBL更好。

3.代码导航。

由于开发人员大多数时候需要使用这些功能,因此使用PBF进行代码导航更加容易。 当您确切知道该做什么时,它没有太大的优势。

4.保留通用代码。

每个应用程序都将具有一些组件,这些组件将在功能中重复使用,即,这些功能并不总是排他的。 在这种情况下,如果我们分别打包所有功能,则它们之间的交互可能会非常混乱。 作为一般原则,我们需要减少这种相互作用并增加包装内部的凝聚力。 我们可以通过将此类实体添加到通用包中来解决这种情况。 在包括Hibernate在内的许多项目中都使用了这种方法。

结论

大多数应用程序将具有4种类型的类。 即

  1. 域对象
  2. 商业服务
  3. 数据检索逻辑
  4. 数据表示逻辑

如果我们使用PBF,它将为我们提供良好的结构表示,但不会提供任何功能表示。 我们需要我们的体系结构以类似于问题域。 因此最好使用“按功能打包”样式。 我们可以使用MyFeatureDAOMyFeatureService之类的命名约定在内部对类进行分类。 这样我们就可以传达课程的意图。

我发现了有关此主题的一些讨论,希望对您有所帮助。

  1. Java实践文章
  2. Hibernate核心实现的经验教训
  3. 更改Java软件包名称如何改变我的系统架构
  4. 演讲者:Kostis Kapelonis
  5. OOD的原理Bob叔叔
  6. 文章说它更好地按包使用
  7. 关于SO的问题按功能打包是否良好?

参考:在The Object Oriented Life博客上, 按功能而不是按层打包来自我们的JCG合作伙伴 Manu PK的类。

翻译自: https://www.javacodegeeks.com/2013/04/package-your-classes-by-feature-and-not-by-layers.html

李宏毅 课程打包

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

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

相关文章

error inflating class binaryXML LayoutParams addRule()

报出异常的原因是由于少添加了构造方法,三个构造方法需要写完整,不能只写一个。参数为(Context, AttributeSet),其中第二个参数用来将xml文件中的属性初始化。 自定义控件若需要在xml文件中使用,就必须重写带如上两个参数的构造方…

AppD方法:Java 9支持

通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控。 参加AppDynamics APM导览! 阅读有关Java 9模块化功能带来的挑战以及AppDynamics保持在该领域的领导者的严格要求的更多信息。 我们很高兴宣布Java 17全面支持,这是…

Java反射,但速度更快

在编译时不知道Java类的最快方法是什么? Java框架通常会这样做。 很多。 它可以直接影响其性能。 因此,让我们对不同的方法进行基准测试,例如反射,方法句柄和代码生成。 用例 假设我们有一个简单的Person类,其中包含名…

Git时间

1、Git是目前世界上最先进的分布式版本控制系统。和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本…

横、竖分割线

竖分割线&#xff1a; <View android:layout_width"0.5px" android:layout_height"120dp" android:background"#B8B8B8" android:visibility"visible" /> <!-- 竖直线 -->横分割线&#xff1a;<Viewandroid:layout…

java中update_Java 7 Update 21安全改进的详细信息

java中updateOracle昨天发布了三个Java更新 。 重要的是要注意它们包含一些与安全性相关的更改。 一段时间以来&#xff0c;这些变更中的大多数已经宣布&#xff0c;首先要注意的是Oracle按计划交付。 Oracle公司Java平台安全经理米尔顿史密斯&#xff08;Milton Smith&…

访问GitHub超慢的解决办法

是github某个CDN(Content Delivery Network&#xff0c;即内容分发网络?)被屏蔽所致。 附件--->记事本&#xff08;选择以管理员身份运行&#xff09;——文件——打开C:\Windows\System32\drivers\etc 右下角选择“所有文件” 选择hosts 打开 如图在这行下面添加绑定IP…

学习使用Whally GraalVM!

介绍 在Truffle在神圣的Graal中服务&#xff1a;Graal和Truffle在JVM上进行多语种语言解释的帖子中&#xff0c;我们得到了简短的介绍&#xff0c;并对Graal&#xff0c;Truffle及其周围的一些概念进行了深入研究。 但是&#xff0c;如果不深入研究实用性&#xff0c;那么任何技…

colos.xml

<?xml version"1.0" encoding"utf-8"?> <!-- /* //device/apps/common/assets/res/any/colors.xml ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License");…

Android样式开发---shape

Thanks to:转载自Keegan小钢 原文链接&#xff1a;http://keeganlee.me/post/android/20150830 一个应用&#xff0c;应该保持一套统一的样式&#xff0c;包括Button、EditText、ProgressBar、Toast、Checkbox等各种控件的样式&#xff0c;还包括控件间隔、文字大小和颜色、阴影…

主键能否@onetoone_双向@OneToOne主键关联

主键能否onetoone现在该继续有关Hibernate的文章了。 最后一个致力于单向OneToOne关联 。 因此&#xff0c;今天我将向您展示如何获取双向OneTonOne主键关联 。 本教程中基于前一篇文章的示例。 让我们开始吧。 我将使用以前创建的相同表。 为了建立双向一对一关联&#xff0c…

Android样式开发--selector

Thanks to 转载自Keegan小钢 原文链接&#xff1a;http://keeganlee.me/post/android/20150905 上一篇详细讲了shape的用法&#xff0c;讲解了怎么用shape自定义矩形、圆形、线形和环形&#xff0c;以及有哪些需要注意的地方。不过&#xff0c;shape只能定义单一的形状&#xf…

Amazon Glacier的Scala客户端

Amazon Glacier是一项安全&#xff0c;耐用且成本极低的云存储服务&#xff0c;用于数据归档和长期备份。 Glacier提供了一种冷藏数据存档解决方案&#xff0c;这意味着已存储的数据不可立即检索。 您首先需要请求检索数据&#xff0c;访问时间可能从几分钟到几小时不等&#x…

Drawable Resources

https://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

SwipeRefreshLayout官方推荐下拉刷新

SwipeRefreshLayoutpublic class SwipeRefreshLayout extends ViewGroup implements NestedScrollingParent, NestedScrollingChildjava.lang.Object↳android.view.View↳android.view.ViewGroup↳ android.support.v4.widget.SwipeRefreshLayout API doc&#xff1a;http://…

jboss加载组件_直接从JBoss AS 7组件使用JGroups

jboss加载组件JGroups是Bela Ban的用于可靠消息交换的软件&#xff0c;该软件高度可配置&#xff0c;可以使用TCP或UDP作为传输协议。 基本上&#xff0c;您在多个客户端上运行JGroup&#xff0c;它们构成一个集群&#xff0c;它们可以在集群内发送和接收消息。 JGroups由JBos…

开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合

链接地址&#xff1a;https://github.com/astuetz/PagerSlidingTabStrip 下载PagerSlidingTabStrip-master 将com.astuetz包&#xff0c;res下的下的资源复制进工程 布局文件&#xff1a;activity_main.xml <RelativeLayout xmlns:android"http://schemas.android.co…

如何处理异常

最近&#xff0c;我与一个朋友进行了讨论&#xff0c;他是一个相对初级但很聪明的软件开发人员。 她问我有关异常处理的问题。 这些问题指出了一种技巧和窍门&#xff0c;肯定有它们的清单。 但是我坚信我们编写软件的方式背后的背景和动机&#xff0c;因此我决定从这种角度写关…

android动画详解

转自&#xff1a;工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀&#xff0c;分析的同时也要整理归纳基础知识&#xff0c;刚好有人微博私信让全面说说Android的动画&#xff0c;所以今天来一发Android应用的各种Animation大集合。英文厉害的请直接移步参考…

凹数科技笔试

一、Java 1、成员变量作用域public/protected/defaultprivate/区别&#xff1f; public&#xff1a;该成员变量或其方法对当前类、同一包、子类、其他包都可见&#xff0c;所有类和对象都可以直接访问。 protected&#xff1a;该成员变量或其方法对当前类、同一包、子类都可…