首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模型与外部数据管理器类中保存模型的数据

在模型与外部数据管理器类中保存模型的数据
EN

Code Review用户
提问于 2015-02-20 00:06:57
回答 2查看 490关注 0票数 1

我有一堆模型(使用activejdbc)人,公司,健康,.等等(我有8种型号)。我给你举了一个模特的例子

在第一种方法中,我有一个数据管理器,它处理我对各种模型的所有插入,例如我的人。

代码语言:javascript
复制
public class Person extends Model {
    static {
        validatePresenceOf(“name”, “birthdate”);
    }
}

在数据管理器中,我执行插入

代码语言:javascript
复制
public class DataManager {
    private DBManager dbManager;
    public void insertData(Data data) throws Exception {
        try {
            dbManager.openActiveJDBCBaseConnection();
            insertPerson(data)
        } catch (Exception e) {
            // stuff
        } finally {
            dbManager.closeActiveJDBCBaseConnection();
        }
    }
   public void insertPerson(Data data) {
       Person person = new Person();
       person.set(“name”, data.name);
       person.set(“birthdata”, data.birthdata);
       person.set(“country”, data.country();
       person.saveit();
}

而不是使用静态方法从person模型本身执行实际插入,然后从数据管理器调用它。

代码语言:javascript
复制
public class Person extends Model {
    static {
        validatePresenceOf(“name”, “birthdate”);
    }
    public static void insertPerson(PersonData data) {
        Person person = new Person();
        person.set(“name”, data.name);
        person.set(“birthdata”, data.birthdata);
        person.set(“country”, data.country();
        person.saveit();
    }

}

public class DataManager {
    private DBManager dbManager;
    public void insertPerson(PersonData data) throws Exception {
        try {
        dbManager.openActiveJDBCBaseConnection();
            Person.insertPerson(data);
        } catch (Exception e) {
            // stuff
        } finally {
            dbManager.closeActiveJDBCBaseConnection();
        }
    }
}

哪种更好些呢?

EN

回答 2

Code Review用户

回答已采纳

发布于 2015-02-20 16:42:17

在我看来,你给出的第一个例子是最好的。它似乎更多地坚持单一责任原则。这基本上意味着你的班级只应该承担一项责任。

注意:您实际上还在破坏这个原则,因为我认为activeJDBC需要对象来保存自己?(我对activeJDBC没有经验,但看了一下之后,似乎就是这样做的)。例如,在我看来,Person.saveit()并不是一个很好的解决方案,但我们会忽略这一点。

我之所以更喜欢第一个例子,是因为使用DataManager来插入比使用Person类更有意义。

如果您查看第二个示例,那么Person.insertPerson()确实没有多大意义。Person真的会插入一个人吗?在我看来,你应该尽可能贴近现实(当然也有例外),让一个人插入一个人并不能真正反映现实。Person.sit()Person.eat()是我希望在Person类中找到的东西。

DataManager (名称中的内容)表示它管理数据。一开始我认为这将用于插入/接收/更新对象(如果我没有检查代码的话)。对我来说,说DataManager.insertPerson()似乎是更符合逻辑的解决方案(尽管它仍然需要实际使用Person.saveit()来实际插入/保存对象)。

我想您的问题可能是“应该将模型的数据保存在模型中还是保存在外部数据管理器类中?”我对此的回答是使用外部数据管理器类(DataManager)。仅仅因为有一个数据管理器有一个insertPerson()方法比一个实际的模型有这个方法更有意义。

票数 1
EN

Code Review用户

发布于 2017-11-10 00:03:55

免责声明:我是ActiveJDBC的作者。

在过去的几年中,我使用JavaLite构建了许多项目,并出现了以下模式:

代码语言:javascript
复制
public class Person extends Model {
   public static Person createPerson(String name, Date birthDate, String country) {
      return Person.createIt("name", name, "birthdate", birthDate, "country", country);
   }
}

通常,我们完全避免构建像您的PersonData这样的中间类,因为它只是无缘无故地重复代码。我们也不构建所谓的经理,因为ActiveJDBC模型知道如何照顾自己。

换句话说,如果对表的访问需要某种逻辑,我们将在模型类上构建一个静态方法。然而,在某些情况下,这样的方法可能管理多个模型。如果变得复杂,则将此代码迁移到一个级别上--用于编排的服务类。

这种方法为我们提供了很好的服务,构建模式范围从50到200个表的应用程序。方法越简单,维护就越容易。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/82014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档