java - EE服务设计和OO建模

标签 java spring oop

<分区>

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

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

我猜这可能是我在 Smalltalk 中的原始 OO 背景在这里脱颖而出,但在 OO 中建模问题一直对我来说是可行的方法。也就是说,使用具有状态和行为的对象进行建模。

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

但是。

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

感谢您阅读到这里。

最佳答案

现实世界的问题通常是基于对象的逻辑和过程逻辑的混合体,尤其是在交易涉及需要同时操作多个不同对象的商业世界中。当然,大多数真实代码都可以使用改进和重构,尤其是在移动目标需求几年之后,更好地理解和使用 AspectJ 可以清理很多程序样板,但是强制所有逻辑都没有意义强大的 OOP 模式,如果它与现实世界中的讲师向学员描述它的方式不匹配的话。

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

关于java - EE服务设计和OO建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243688/

相关文章:

java - "The requested resource does not support http method ' GET '"- 但我 'm not using C# or asp.net, I' 是发出请求的人

Java小程序在eclipse中工作,而不是在其他地方工作

java.sql.SQLException : Access denied for user 'root' @'localhost' (using password: YES)

Java 处理文件输入

php - "public"和 "public static"之间的区别?

java - 在android中使用JSON将字符串编码为UTF-8

java - ConflictingBeanDefinitionException : Same class name, 不同的包

java - Spring中使用表达式语言出错

java - 在 Spring 容器启动时注册 Jersey REST 服务

java - 为什么我们不在 getter 中使用 'this'?