java - android类构造函数中的最佳实践

标签 java android class constructor dependencies

我应该在 android 中初始化我的类的正确方法是什么,该类称为 Compilation 并且它的所有值都在数据库中。

我可以做到以下几点:

1

public Compilation(int id)
{
    // get db singleton here and fill all values
    // however I feel this is bad OO because nobody knows I am doing this
}

2

public Compilation(int id, SQLiteDatabase db)
{
    // use the provided db to get the info
    // however now all calling classes will have to get the db for me
}

3

// get all compilations at once
SQLiteDatabase db = DatabaseHelper.getInstance().getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM Compilation", null);

while(c.moveToNext())
{
    // get all params here
    Compilation comp = new Compilation (a,b,c,d,e);
}

public Compilation(a,b,c,d,e)
{
    // just assign all the values given to private vars
}

The problem I see with this is that now the Compilation class is no longer so self contained, it needs another class to initialise it.

哪一个是正确的做法?

最佳答案

软件设计的一般规则告诉我们,我们应该创建对软件系统其他部分的依赖性最小的类。通过这种方式,我们最终得到了可重用性更好的类。

您提出的第一个替代方案是最糟糕的一个,因为它对一个特定的数据提供程序 (sqlite) 产生了非常紧密的依赖。维护这样的类可能是一场噩梦(试想下一个版本的 Android 将带有 sqlite 或 mysql :) 而你想切换到 mysql)

如果您将构造函数参数从类替换为接口(interface),从而创建我们称之为 Dependency injection 的东西,那么第二个会更好一些。 .然而,有更好的方法在 Android 上进行依赖注入(inject)(查看示例 Dagger)

第三个在我看来是最合适的,因为您不会产生任何依赖性。也许为了简化此类类的创建(并使代码更“企业化”一点),您可以创建一个工厂类来创建编译类的实例(更多关于此 here )

然而,归根结底,这不是关于 Android 最佳实践的问题,而是关于软件设计决策的问题,这在很大程度上取决于您要做什么!

关于java - android类构造函数中的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192751/

相关文章:

java - 我如何从java中的类调用另一个类

java - 无法从 GET 请求中获取 JSON

android - 录音机错误

java - 如何从列表中删除对象

android WebView 无法正常工作

java - 如何在Onitemclicklistener函数接口(interface)上实现多个按钮?

c++ - 它将是哪种类关系[特定于 C++]?

python - 如何只获取父类对象的属性

java - 如何测试需要任务花费未定义的时间才能完成的功能

java - 为 "Plug.dj"制作一个机器人