Java 质疑春季mvc
我正在开发一个Spring Boot MVC应用程序,在阅读了许多指南和评论之后,我仍然有一些疑问,我没有取消标记 1:我不想要一个贫乏的模式,所以我没有一个单一的服务,其中所有的服务都是相互调用的,但是这些服务只与存储库实例化实体通信,我把业务逻辑放在其中,对吗 2:转换函数entitiy->dto放在哪里?我读到有人将它们放在控制器中,其他人放在服务中,其他人放在同一个域中。。目前,这是最干净的解决方案,我更喜欢有一个DTO的构建器来提供实体输入,好吗?我有禁忌症吗 3:多态性和继承性:我有一个服务,它根据相关实体的属性组成一些菜单级别。我不想在任何地方都有if块,我希望能够将这个逻辑放在一个点上,实例化正确的类(我事先不知道),并利用多态性,我该怎么做?被认为涉及服务、实体和相关逻辑Java 质疑春季mvc,java,spring,spring-mvc,polymorphism,dto,Java,Spring,Spring Mvc,Polymorphism,Dto,我正在开发一个Spring Boot MVC应用程序,在阅读了许多指南和评论之后,我仍然有一些疑问,我没有取消标记 1:我不想要一个贫乏的模式,所以我没有一个单一的服务,其中所有的服务都是相互调用的,但是这些服务只与存储库实例化实体通信,我把业务逻辑放在其中,对吗 2:转换函数entitiy->dto放在哪里?我读到有人将它们放在控制器中,其他人放在服务中,其他人放在同一个域中。。目前,这是最干净的解决方案,我更喜欢有一个DTO的构建器来提供实体输入,好吗?我有禁忌症吗 3:多态性和继承性:我有
非常感谢您的问题更多地与软件设计相关,而不是特定于Spring框架。允许框架规定如何组织代码有一些缺点 但要回答你的问题:
- 对于类型控件,一个选项是将方法返回类型设置为接口,然后使用可能返回的不同对象来扩展该接口
- 对于不同对象的构造,您可以将其封装在服务内部的私有函数中,如果这是您将要使用它的唯一位置,或者如果您将在更多位置使用它,那么您可以将其提取到工厂,并将其用作服务的协作器。对于构造,您将无法避免
检查,但是在服务之外,一旦您提供了不同的实例,那么您就不需要进行更多if
检查李>if
- 最后,在服务中返回您构建的实例,当它实现接口时,编译器仍然会对此感到高兴
希望有帮助 对于第三点,我有一些想法,但没有一个我认为是非常好的。第三点,我不明白你想要实现什么,如果你能提供一个你打算做什么的例子,这将非常有助于理解控制器调用服务方法来填充特定级别的菜单。该服务是一个实体(实体运动),可以是4种不同的类型(实际上是属性类运动),该类型遵循不同的逻辑获取数据以返回控制器。现在,在我的服务中,if ent.is_type_1()。。如果ent.是_类型。。等等…我不想这样做,我更喜欢有一个类来管理正确的类(可能扩展Sport)到实例,然后使用多态性自动调用正确的方法。。。将if代码集中在一个独特的点上,我如何做到这一点以尊重体系结构规则MVC和OOP?如果你缩小问题的范围,你可能会得到更多的回答。你还想问一个具体的问题。你可能需要将这篇文章分成多篇文章。非常感谢。我试图更好地解释我在第三点中的意思。我希望这足够了,我想了解封装对象的正确方法,反映模式,尽可能利用代码的多态性、可维护性和可用性。。总的来说,我所期望的开发将是一个大项目,需要更多的人工作,并且需要很长时间(针对第1点、第2点,我已经猜到,在架构方面没有真正的解决方案,我有足够的时间来确认所做的工作的正确性)我试着用最好的方式来解释,如果我不知何故误解了什么,或者我遗漏了什么,让我知道,我会尽我所能再次回答,我想我已经理解了。我的错误是尝试使用泛型对象返回来返回不同的类。我不知道如何使用界面,但我正在寻找一个例子,现在我可以做你们写的。我尝试并将更新您的解决方案,非常感谢。请记住,使用服务的控制器只能看到接口,以及接口声明的方法,如果您返回的对象的方法比接口多,则它们将不可见,除非您强制转换到特定对象,因此,这与执行if检查相同。如果您认为自己处于这种情况,请重新考虑另一种设计选项,因为您增加了更多的复杂性,但没有获得多态性的好处。