java—创建后用方法加载对象的数据,还是直接用加载的数据获取示例化对象?

fae0ux8s  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(269)

在webapp中,我有一个数据模型(我们称之为item)。本项数据采用两种方式填写。第一种方法是xml解析器(数据导入),第二种方法从数据库读取数据(同时解析网站)。
我看到了实现这个类的两种可能的方法:
第一种方式:

public class Item() {

      public void parseFromXML(String xml) {
        //xml parse code
      }

      public void loadFromDB() {
        //load from Database 
      }
    }

因此,我可以使用以下内容创建新项目:

Item myItem = new Item();
myItem.parseFromXML(xml);

或者

Item myItem = new Item();
myItem.loadFromXML();

第二种方式:

public class Item() {

  public static Item getItemFromXML(String xml) {
    Item i = new Item();
    //xml parse code
    return i; 
  }

  public static Item getItemFromDB() {
    Item i = new Item();
    //Database load code
    return i; 
  }
}

通过这种方式,我可以示例化如下项:

Item myItem = Item.getItemFromXML();

或者

Item myItem = Item.getItemFromDB();

我的问题是:哪种方法更好,为什么?我个人更喜欢2。这样,因为使用这个类的程序员(此时只有我)永远不会得到一个void item对象(我能在构造函数中抛出一个'false示例化方法'-异常吗?)。
(对不起,我的英语不是最好的,希望你能理解)

5jvtdoz2

5jvtdoz21#

使用itemfactory不是更好吗:

ItemFactory factory = new XMLItemFactory();
URI uri = new File("item.xml").toURI();
Item item = factory.create(URI);

或者数据库:

DatabaseItemFactory factory = new DatabaseItemFactory();
factory.setDataSource(dataSource); // Use DI here
URI uri = URI.create("item://id=123");
Item item = factory.create(URI);

优点是您(或其他人)可以轻松地提供新的itemfactory实现,例如使用java序列化或将项存储在oodb中,或使用webservice远程加载它。最好将对象的创建/加载从不同的位置分离到不同的类中。
我不希望在我的域对象模型中有数据库依赖项。

相关问题