【发布时间】:2012-01-14 06:27:16
【问题描述】:
也许这对你来说是显而易见的。我是java新手(半年工作),我和我的同事讨论过。我很难根据他们的职责命名我的班级。为此,我的班级获得了他们不应该承担的责任。
你能帮帮我吗?
顺便说一句:我目前在一个项目中工作,我必须使用服务类中的持久层。我已将包拆分为模型、服务和持久性。
【问题讨论】:
标签: java model-view-controller architecture naming-conventions
也许这对你来说是显而易见的。我是java新手(半年工作),我和我的同事讨论过。我很难根据他们的职责命名我的班级。为此,我的班级获得了他们不应该承担的责任。
你能帮帮我吗?
顺便说一句:我目前在一个项目中工作,我必须使用服务类中的持久层。我已将包拆分为模型、服务和持久性。
【问题讨论】:
标签: java model-view-controller architecture naming-conventions
命名约定请阅读官方convention。
Manager - 顾名思义,它管理代码中的事物,如 EntityManager,它管理实体,TransactionManager - 它管理事务。所以你可以有一个叫做 SecurityManager 的东西,它管理哪个 Algo 用于加密等
控制器 - 再次,名称说明了很多,控制需要做什么,或者如何做事情。例如ActionController - 负责接收用户操作事件时要做什么
服务 - 将其视为类似 postalService 的东西,由某人在一般注释上执行的任务,您可以使用它。
打包代码需要深思熟虑,您的应用程序打包应始终与其所服务的业务模型保持一致。
除了业务模型之外,您还需要考虑该功能是否是应用程序的核心,以便将其移至核心,例如该功能是否用于与其他应用程序通信,您希望将其移至集成下等等。
【讨论】:
为了补充已经给出的好答案,如果您发现很难为您的课程找到合适的名称,那么也许您应该调查您的课程是否有多个职责。如果是这种情况,那么您绝对应该重构代码以将职责隔离到单独的类中。
【讨论】:
这些术语背后有一定的模式和指导方针,我通常以此为基础:
Controller 基于Model-View-Controller design 模式,应明确用于基于此设计模式实现控制器功能的类。例如。如果您使用的是 Spring MVC 并且您从 Controller 类之一进行扩展。
Service 不太具体,但我建议基于 "Patterns of Enterprise Application Architecture" 中的 Service Layer 模式实现。基本上,控制器更特定于平台(例如通过 HTTP 传输和呈现的超文本,通常是基于 Web 的控制器的 HTML)服务不应该知道谁在使用它以及如何使用它。您只是提供一个统一的界面,例如 Web 控制器可以依次使用。
经理嗯...管理东西。连接、应用程序上下文、会话;通常作为整个应用程序的组件可以与之通信的中心位置。
【讨论】:
我不知道我是否曾指定过班级经理,所以我将其省略。
对我来说,controller 是控制或决定某物(信号、消息、..)应该去哪里的东西。
服务是一个接口(以及该接口的实现),通常在系统或子系统的边界提供一些功能。尽可能隐藏实现细节。
【讨论】: