gpt4 book ai didi

java - 使用继承在我的域层中添加字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:12 26 4
gpt4 key购买 nike

我创建了一个名为 Base 的类,它有一个存储 UUID 的字段,因为我希望系统中的所有对象都具有该字段。我还希望在所有可以存储在数据库中的对象上有一个名为 id 的字段。我不会将它添加到 Base,因为并非我域层中的所有对象都将持久保存到数据库中。我可以创建另一个继承自 Base 的类并添加该字段,然后让所有需要的类都继承自该字段。

是否应该避免创建为添加这样的字段而存在的层次结构?有更好的选择吗?

最佳答案

对于非常简单的应用程序,您只能使用继承。但是随着应用程序变得复杂,如果您使用组合,您的类将更加灵活。因此,在接口(interface)中定义公共(public)行为、公共(public)字段,并要求具有这些公共(public)行为的类来实现它们。为公共(public)接口(interface)提供实现,让您的类将调用委托(delegate)给实现类。

这是一个例子:

interface Uniqueness {
long getUUID();
void setUUID(long uuid);
}

interface Storable {
long getId();
void setId(long id);
}

class UniquenessSupport implements Uniqueness {

private long uuid;

@Override
public long getUUID() {
return uuid;
}

@Override
public void setUUID(long uuid) {
this.uuid = uuid;
}
}

class StorableSupport implements Storable {
private long id;

@Override
public long getId() {
return id;
}

@Override
public void setId(long id) {
this.id = id;
}
}

class Some implements Uniqueness, Storable {

private UniquenessSupport uniquenessSupport;
private StorableSupport storableSupport;

public Some() {
uniquenessSupport = new UniquenessSupport();
storableSupport = new StorableSupport();
}

@Override
public long getUUID() {
return uniquenessSupport.getUUID();
}

@Override
public void setUUID(long uuid) {
uniquenessSupport.setUUID(uuid);
}

@Override
public long getId() {
return storableSupport.getId();
}

@Override
public void setId(long id) {
storableSupport.setId(id);
}
}

在这个简单的案例中,有很多样板代码,但是当您向类中添加更多字段和方法时,这是获得灵 active 并避免代码重复的唯一方法。如果您将有更多的接口(interface),比方说:PayableSendableReturnable 并且想要创建一个只有 的新类Payable 并具有Uniqueness,您使用合适的接口(interface)和支持类:Uniqueness + UniquenessSupportPayable + 仅限 PayableSupport

另一方面,如果使用继承,您将扩展一些需要包含 PayableSendable 等的所有方法的基类,以适应所有需要,但您的类(class)只需要 Payable 并且具有 Uniqueness。通过继承,您还可以使它成为 ReturnableStorable 等。

关于java - 使用继承在我的域层中添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535668/

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