从JavaBean类更新数据库是否合适?

4
一些背景:我正在创建一款游戏。在这个游戏中,玩家可以拥有一座房子。房子里可能包含家具对象,而这些家具可能具有自定义的纹理设置。一个家具可能包含不同数量的纹理。一个家具有几个插槽(0-x)用于纹理。
房子类:
public class House {
      private List<Furniture> furniture;

      public House() {
           furniture = new ArrayList<Furniture>();
      }

      public List<Furniture> getFurniture() {
            return furniture;
      }

      public void addFurniture(Furniture furniture) {
             furniture.add(furniture);
      }
}

家具类:
 public class Furniture {
       private Map<Integer, Texture> textures;

       public Furniture() {
             textures = new HashMap<Integer, Texture>();
       }

       public void setTexture(int index, Texture texture) {
             textures.put(index, texture);
       }
 }

在玩家房屋家具管理GUI中,将会有类似以下的内容:
List<Furniture> furniture = house.getFurniture();
// Let's assume that player selected one piece of furniture which he wants to edit
Furniture furniture = .... // This is the one he selected.
// Later on he chooeses a texture and I set it:
furniture.setTexture(some_index, new Texture(...));

问题

在setTexture方法内更新数据库是否有意义?从数据持有类中与数据存储区交互是否是良好的实践?

1个回答

1
根据我的经验,直接在这些Java Bean中进行更新不是一个好的做法。你应该使用DAO模式。通过这种方式,你可以在模型上抽象出所有的CRUD操作。
如需更详细信息,请访问DAO模式

所以基本上,当我设置纹理时,我应该调用像HouseDAO.updateFurniture(furniture)这样的东西。我之前有过这个想法,但由于某种原因我拒绝了它... - Justas S
没错。这样,你就可以实现关注点分离。而且,请确保使用接口。 - dylaniato
接口?在这种情况下,它会给我什么? - Justas S
这是一个良好的编程实践问题。您使用接口,以便调用updateForniture方法的类可以忽略真正的实现。例如:您创建了声明updateForniture方法的接口HouseDAO。客户端类将调用该接口方法。然后,您可以使用JDBC等实现来持久化修改。但是,如果客户端更喜欢JPA实现呢?您必须实现一个新类,但客户端类仍然调用接口的方法。希望这足够清楚。 - dylaniato
那么这就是一个抽象的问题了?我想我明白了。 - Justas S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接