Java 模式问题 - 模型中的构建器或数据库代码?

标签 java model design-patterns

我需要使用“A”构建“MyThingie”。 MyThingie 位于模型包中,当前模型中没有代码访问数据库。我的问题是我应该使用以下哪种模式?顶部还是底部?或者完全不同的东西。

package com.model;

public class MyThingie {
    private String foo = "";
    private String bar = "";
    private X x = null;
    private Y y = null;
    private Z z = null;

    public MyThingie() {
    }

    public MyThingie(A a, X x, Y y, Z z) {
        this.foo = a.getFoo();
        this.bar = a.getBar();
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public static MyThingie createFromDb(A a) { 
        X x = fetchXFromDB(a.getBlah()); 
        Y y = fetchYFromDB(a.getFlah()); 
        Z z = fetchZFromDb(a.getZlah()); 

        return new MyThingie(a, x, y, z); 
    }

    // getters and setters
}

// ----------- OR----------------

package com.model;

public class MyThingie {
    private String foo = "";
    private String bar = "";
    private X x = null;
    private Y y = null;
    private Z z = null;

    public MyThingie() {
    }

    // getters and setters
}

package com.builder;

public class MyThingieBuilder {
    public MyThingieBuilder() {
    }

    public static MyThingie createFromDb(A a) { 
        MyThingie m = new MyThingie();

        m.setFoo(a.getFoo());
        m.setBar(a.getBar());

        X x = fetchXFromDB(a.getBlah()); 
        Y y = fetchYFromDB(a.getFlah()); 
        Z z = fetchZFromDb(a.getZlah()); 

        m.setX(x);
        m.setY(y);
        m.setZ(z);

        return m;
    }
}

最佳答案

两种解决方案都可以。但有一种“构建器”方法/模式您可能会觉得有用。

根据我发布的评论,我提供了一个将 Builder 作为内部类的示例

Widget x = new Widget.Builder("1", 1.0).
                 model("1").build();
Widget y = new Widget.Builder("2", 2.0).
                 model("2").manufacturer("222").
                 serialNumber("12345").build();
Widget z = new Widget.Builder("3", 4.0).  
                 manufacturer("333").
                 serialNumber("54321").build();

该模式背后的基本思想是限制构造函数参数的数量并避免使用 setter 方法。参数过多的构造函数,尤其是可选参数,不仅丑陋而且难以使用。不同模式的多个构造函数令人困惑。 Setter 方法会增加困惑并强制对象可变。这是该模式的类骨架 -

public class Widget {
 public static class Builder {
 public Builder(String name, double price) { ... }
 public Widget build() { ... }
 public Builder manufacturer(String value) { ... }
 public Builder serialNumber(String value) { ... }
 public Builder model(String value) { ... }
}

private Widget(Builder builder) { ... }

}

关于Java 模式问题 - 模型中的构建器或数据库代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780281/

相关文章:

java - java中快速排序的swap方法

model - 您是否为 MVP 及其变体中的表示层购买了重用故事?

python - 我如何将数据保存/插入到表中以从表单中获取值?

design-patterns - 工厂模式中的参数化工厂 - 是否存在其他方式?

c# - 我最终采用了什么设计模式?

java - 如何在JFrame上放置多张图片?

java - 在 JLabel 中显示 JComboBox 所选项目

ios - 迁移核心数据和映射模型

javascript - 使用下划线、_.extend 关键字的 Mixin 模式

Java 1.5 : mathematical formula parser