java-使用Service的Spring Entity,可能存在设计缺陷,但仍然

我正在“ springwrapping”的遗留数据库的ID是Strings,并且提供了一些信息.例如,一个UserId看起来像“ DK-6715-00001”,表示丹麦的一个用户,邮政编码6715.它被包裹在企业应用程序中,因此需要保留,我的实体在其setter方法中对此进行了验证.

但是,用户还具有国家/地区和邮政编码字段,因此,在设置Bean的ID时,也可能还要设置国家/地区和邮政编码.为此,它需要CountryService查找Dk是丹麦的Country对象,并在PostalService中使用新发现的Country对象查找6715.

首先,可以将其连接起来,以便可以从我的Entity对象访问CountryService和PostalService吗? (实体是在bean定义中的服务对象之前定义的).首先,这应该违反任何不错的设计原则.我有什么更好的设计可以让我的实体携带对服务bean的引用?

干杯

尼克

最佳答案
如果您正在寻找设计建议,这是我的0.02美元:实体不应该引用服务bean.服务应该在实体上运行,而不是相反.因此,如果您发现您需要在一个实体类中引用服务,则可能表明该实体类中的业务逻辑过多.根据经验,只要实体类只处理单个逻辑对象或相当简单(例如equals方法),业务逻辑就可以在实体类中使用.但是,如果业务逻辑是“跨实体”(涉及多个实体对象),则应在服务Bean中实现它.

如果您不在乎我的想法,而只是想让设计工作:您可以使用AspectJ将Spring bean引用注入实体中.我相信它需要AsjectJ额外的编译步骤和/或运行时支持.无法使用Spring正确地执行此操作,因为在使用new关键字创建实体对象时需要注入服务对象,而Spring不支持该关键字.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...