私たちの持っているものから始めましょう。最初のURLはモデルクラスで、URLQueryはハンドラ/コントローラクラスのようです。あなたはCRUD操作を必要とするデータベースを持っています。これはコントローラークラス自体に入り、DBと言えます。
ここで機能性を分離してみましょう。それで、モデルはどこから来ているのか気にしないでください。同様に、モデルとコントローラは、dbがどのようにセットアップされているか、および/またはdbがリレーショナルであるかどうかを知る必要があります。コントローラーは論理的なフローハンドラーとだけ考えてください。 DBWrapperは、どのクラスのどのオブジェクトを保存しているのかを知る必要はなく、コントローラはXデータをY形式で保存してZテーブルに保存するように指示します。
だから、どのように私はそれがこの
class URL
{
// Variables/methods go here
String Serialize()
{
// This is the data that gets saved to DB. You could return Object, to hide the type
}
static URL Deserialize(String serializedURLModel)
{
Object xyz = /* extract data from serializedURLModel here*/;
return new URL(xyz);
}
}
あるだろうそして、コントローラクラスがコントロールを取り、周りのロジックを駆動する...
public class URLQuery
{
DB db;
public void createURL(URL url)
{
if(!db.HasTable(URLTable))
db.createTable(URLTable); //Assume that you are creating columns and their types here.
db.put(URLTable, url.GetID(), url.Serialize());
}
public void getURL(String urlID)
{
return URL.Deserialize(db.getObjectforColumn(URLTable, urlID));
}
}
最後に、私はクラスDBWrapperを持っているでしょうインターフェイスであるDBを返します。したがって、DBWrapperクラスの外部では、コントローラはどのDBであるか、どのように実装されているのかわかりません。以下のような何か:
interface DB
{
void createTable(String Tablename, ... etc);
void GetObjectForColums(String tableName, String column);
}
public class DBWrapper
{
public static getDB()
{
return new MySQL_DB();
}
private class MySQL_DB implements DB
{
void createTable(String Tablename, ... etc) // implement it here
void GetObjectForColums(String tableName, String column) //implementation
}
}
はその有用ホープ:)
@niksoftengはい、私はまだどちらかを決定しています。 – user5331188