当前位置: 首页 > 面试题库 >

按功能打包方法好吗?

黄淇
2023-03-14
问题内容

我喜欢按功能打包的想法,它极大地减少了在编码时跨包移动的时间,并且所有相关的东西都放在一个地方(包)。但是,不同包中的服务之间的交互又如何呢?

假设我们正在构建一个博客应用程序,并且将所有与用户相关的操作(控制器/服务/存储库)放入com.mycompany.myblog.users程序包中。以及所有与博客帖子相关的操作(控制器/服务/存储库)com.mycompany.myblog.posts。

现在,我想显示用户个人资料以及他发布的所有帖子。我应该打电话myblog.posts.PostsService.getPostsByUser(userId)myblog.users.UserController.showUserProfile()吗?

封装之间的耦合又如何呢?

同样,无论我在何处阅读按功能打包,每个人都说这是一个好习惯。那么,为什么许多书作家甚至框架鼓励按层次分组?只是想知道:


问题答案:

应该将一起重用的类打包在一起,以便可以将打包程序视为可供你使用的完整产品。一起重用的那些应该与那些不重用的那些分开。例如,你的Logging实用程序类不必与文件io类一起使用。因此,将所有日志记录分别打包。但是日志记录类可能彼此相关。因此,请创建一种用于日志记录的完整产品,例如,想要一个更好的名称commons-logging,将其包装在一个(可重用的)jar中,并创建另一个单独的完整产品用于io实用程序,再一次是为了获得更好的名称,例如commons- io.jar。如果将“ commons-io”库更新为“支持java nio”,则你不一定要对日志记录库进行任何更改。因此将它们分开会更好。

现在,假设你希望你的日志记录实用程序类支持结构化日志记录,以便通过诸如splunk之类的工具进行某种日志分析。你的日志记录实用程序的某些客户端可能想要更新到较新的版本;其他一些可能不会。因此,当你发布新版本时,请将所有需要的类打包并一起重新使用以进行迁移。因此,实用程序类的某些客户端可以安全地删除旧的commons-logging jar并转移到commons-logging-new jar。其他一些客户仍然可以使用较旧的jar。但是,不需要客户同时拥有这两个jar(新的和旧的),这仅仅是因为你强迫他们为旧的打包jar使用某些类。

避免循环依赖。a依赖b; b对c 条件; 但是d取决于a。该场景显然令人望而却步,因为很难定义层或模块等,并且你不能相对于彼此独立地进行更改。

同样,你可以打包你的类,以使如果某个层或模块发生更改,则不必一定更改其他一个或多个模块。因此,例如,如果你决定从旧的MVC框架升级到其余的API,则仅视图和控制器可能需要更改。你的模型没有。



 类似资料:
  • 问题内容: 最近,我遇到了有关javajava的博客文章http://java.dzone.com/articles/how-changing-java- package,其中 介绍了按功能打包Java代码。 我喜欢这个主意,但是对于这种方法我没什么疑问。我问了我一个问题,但没有得到满意的答复。我希望StackOverflow上的人可以澄清我的问题。 我喜欢按功能打包的想法,它极大地减少了在编码时

  • 问题内容: 我正处于Web应用程序的设计阶段,该应用程序允许用户创建工作请求,而工作人员则花时间应对这些请求。该应用程序还将具有报告功能,供主管使用以获取每日总计,报告,并说明所花费的时间“成本分配”。 我过去处理过的应用程序是使用逐层方法设计的。我认为按功能设计使用软件包会更有效,我对此设计有疑问。 我目前对功能包的想法: 请求-对请求进行CRUD,然后分配,添加发票编号等。 工作时间-针对用户

  • Verity Sense 配有一个按钮,根据使用情况和按下时长具有不同功能。参见下文,了解按钮在不同模式下的功能以及不同颜色 LED 的含义。 按钮功能 打开/关闭传感器 短按按钮可打开传感器。 按住按钮可关闭传感器。 选择训练模式 要选择训练模式,请短按按钮进行切换,直至所需模式旁的 LED 灯亮起。 您可通过短按按钮来查看已锁定的训练模式。侧边的状态 LED 灯在心率模式下亮蓝色,在记录模式下

  • 我使用lambda函数中的functional方法实现了函数接口。所有的工作都很好,只是我遇到了一个错误,即必须实现这个继承的抽象方法(在我的例子中是函数方法)。现在我很困惑。我使用lambda函数实现了这个函数方法,为什么我要再次实现这个方法。函数方法的实现是如何正确完成的?我的代码: 谢谢你的帮助。:)

  • 本文向大家介绍Webpack按需加载打包chunk命名的方法,包括了Webpack按需加载打包chunk命名的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近,遇到复杂h5页面开发,为了优化H5首屏加载速度,想到使用按需加载的方式,减少首次加载的JavaScript文件体积,于是将处理过程在这里记录一下,涉及到的主要是以下三点: 使用Webpack如何做按需加载 filename和chun

  • 问题内容: 当在Java 8中使用FP习惯用法时,异常(尤其是经过检查的异常)会严重中断程序逻辑的流程。这是一个任意示例: 当无法解析的字符串存在异常时,以上代码将中断。但是说我只想用一个默认值替换它,就像我可以这样: 当然,这仍然会失败,因为仅处理s。我想要以下内容: 注意: 这是一个自我解答的问题。 问题答案: 下面显示的是该类的完整代码。它具有相当大的API,是对API 的纯扩展,因此可以在