Java EE服务设计与面向对象建模

Java EE服务设计与面向对象建模,java,spring,oop,Java,Spring,Oop,在我们的spring(或同等)有线服务世界中,我看到的Java代码似乎越来越程序化,没有太多地强调在OO中建模问题 例如,一个有工作要做的服务可以很好地将其内联到singleton服务类的服务方法中——可能超过几百行。或者,也可以创建本地方法,但由于服务是无状态的,因此总是使用所需参数的堆栈(没有双关语)调用这些方法。太吵了 我猜这可能是我在Smalltalk中最初的OO背景,但在我看来,在OO中建模问题一直是一条出路。也就是说,使用具有状态和行为的对象进行建模 另一种方法可能是创建从服务调用的

在我们的spring(或同等)有线服务世界中,我看到的Java代码似乎越来越程序化,没有太多地强调在OO中建模问题

例如,一个有工作要做的服务可以很好地将其内联到singleton服务类的服务方法中——可能超过几百行。或者,也可以创建本地方法,但由于服务是无状态的,因此总是使用所需参数的堆栈(没有双关语)调用这些方法。太吵了

我猜这可能是我在Smalltalk中最初的OO背景,但在我看来,在OO中建模问题一直是一条出路。也就是说,使用具有状态和行为的对象进行建模

另一种方法可能是创建从服务调用的有状态原型委托,该委托可以是有线的,也可以是加载了必要的(实体、单例DAO/服务等),此外,还可以创建一些其他装饰器来包装实体(esp集合),以提供一些模型列表行为(我有一个列表af帐户,我有一些基于列表的行为–这必须是一个持有列表的类,它不能只是技术列表类及其在服务中内联的使用行为(但通常是))

但是

创建某些此类对象会使用内存,在高吞吐量环境中,这可能会导致创建数千个小型策略/装饰器实例。 那么这对现实世界有什么影响呢?额外的GC会影响性能吗?或者,假设JVM实例的容量在几GB左右,Java能应付吗? 是否有人基于这些原则交付了JavaSOA?是否有关于这个主题的论文


感谢您阅读本文。

现实世界的问题通常是基于对象的逻辑和过程逻辑的混合,特别是在业务世界中,事务需要同时操作多个不同的对象。当然,大多数真实代码都可以使用改进和重构,特别是在移动目标几年后更好地理解和使用AspectJ可以清理大量的过程样板文件,但如果它与现实世界的讲师向学员描述的方式不匹配,那么将所有逻辑强制为强OOP模式是没有意义的


您所描述的基本上是命令模式,虽然在某些情况下它是有用的(它本质上是
Runnable
),但通常不值得使用,除非有基于时间的考虑(串行执行、并行性)或事务本身需要持久性(例如银行业务).

我读了Bob叔叔的书,了解到输出参数几乎等同于副作用,本质上相当丑陋。现在我不得不在无状态bean中不断使用它们。我尽最大努力将逻辑委托给本地对象实例,但最终对“文本书”的使用方式有一个限制我可以采用这种方法。但我的意思是,业务模型行为几乎不应该放在AOP下——除非你想隐藏它。将AOP用于反腐败代码,但不用于核心行为。在这种情况下,委托是一个有状态命令,当然是在当前线程中。如果它简化了cod,那么这总是值得做的e、 除非(我的实际问题)这会对性能造成不可接受的影响。作为旁白,我一直对必须移除锅炉板的断言感到困惑(好像它会导致大脑损伤或其他事情)BP总是很简单…@StripLight它可能很简单,但它是多余的,而且它通常被复制到许多不同的地方。如果它可以被抽象为建议,它会使代码更可读、更易于维护。Spring的
@Transactional
就是一个很好的例子;没有必要将事务处理分散到各个地方我们的代码,当您可以在一个地方编写代码并在需要的地方应用它时,由于拼写错误或更新失败而导致错误的风险增加。