gpt4 book ai didi

java - 自定义构造函数 : Apache Cayenne 3. 2M

转载 作者:行者123 更新时间:2023-11-30 09:18:15 26 4
gpt4 key购买 nike

我是 API 的新手。在我看来,您必须像这样通过“上下文”对象构造对象:

ServerRuntime cayenneRuntime = new ServerRuntime("cayenne-project.xml");
context = cayenneRuntime.newContext()
...
MyEntity entity=context.newObject(MyEntity.class);

而不是仅仅以通常的 new() 方式创建 Java 对象:

MyEntity entity=new MyEntity();

但我想为我的“MyEntity”类创建一个构造函数,它会执行如下操作:

public MyEntity(String inputFile) {
...
do setters based on information derived from inputFile (size, time created etc).
...

我怎样才能做到这一点 - 理想情况下,我想保留类 MyEntity 本身的逻辑,而不是在其他地方使用“包装器”类来实例化对象并执行设置....我想我可以有一个'helper' 方法,它只是先前实例化实例的设置......但是我在这里缺少一个成语......?

最佳答案

关于通过“context.newObject(..)”创建对象的做法是正确的——这是最好的方法,而且会让您远离麻烦。您实际上仍然可以拥有自己的构造函数(前提是您还维护要使用的框架的默认构造函数):

public MyEntity(String inputFile) {
...
}

public MyEntity() {
}

然后您可以先创建您的对象,然后再将其添加到上下文中:

MyEntity e = new MyEntity(inputFile);
context.registerNewObject(e);

就习语而言,一个非常常见的习语是避免持久对象中的业务逻辑。 ORM 模型通常在多个应用程序中重复使用,并且您添加到实体的行为并不适用于所有地方。这个论点的另一面是,除了最简单的方法之外,其他任何方法都依赖于周围环境的知识——你不希望你的实体知道的东西。

相反,人们会编写一个自定义服务层,它位于实体之上并包含所有业务逻辑(通常与依赖注入(inject)容器一起使用)。服务不是实体的包装器(事实上服务通常是单例)。您可以将它们视为可配置的策略对象。在 Java 世界中,这种分层设计和这种类型的关注点分离非常普遍,并且可能是最灵活的方法。

但是,如果您想快速破解某些东西,并且不希望它成长为一个复杂的多模块系统,那么在实体中使用自定义构造函数或静态工厂方法当然就可以了。

关于java - 自定义构造函数 : Apache Cayenne 3. 2M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18572146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com