0

私はソフトウェア開発に比較的慣れていないということから始めたいと思います(私は過去1年間自習してきました)。

私は最近、ソフトウェアアプリケーションのさまざまなレイヤー、つまりUI、ビジネスロジックレイヤー、データアクセスレイヤーに頭を悩ませようとしています。私が学んだことを実践するために、データベースのバックアップを取り、後日それらのバックアップを復元できるアプリケーションを開発しています。

私の質問は、「システム」と「ユーザー」のオプションをどのように設計すればよいかということです。たとえば、ユーザーが選択したデータベースプラットフォーム(SQLまたはOracleなど)を選択できるようにします。XLMファイル内に情報を保存することを計画しています。プログラムでこの情報にアクセスする方法がわかりません( XMLファイルの読み取りと書き込みの方法を理解しています。

私の現在のアーキテクチャは次のようになります:(これは恐ろしい設計である可能性があることに注意してください。建設的な批判を喜んで受け入れています)。

UI:メインMDI。ユーザーオプションフォームデータベースマネージャーフォーム

BLL:データベース・マネージャー・フォームを駆動するデータベース・マネージャー・クラス。

DAL:データベースプラットフォームの種類ごとに1つのクラス。これらのクラスはすべて、私が設計した「DatabasePlatform」インターフェイスを実装する必要があります。この背後にある考え方は、コードをほとんどまたはまったく変更せずに、後日プラットフォームを追加できるようにすることです(「オープンクローズ」の原則を取り下げようとしています!)

私は少し確信が持てず、私のシステムオプションがこれらすべてにどこにどのように適合するか、そして最終的にはどこにそれらを配置するかについて非常に混乱していますか?どの時点でシステムオプションを確認しますか?UIまたはBLLにありますか?どのDALを選択するかを知る必要があるので、DALでチェックするべきではないと感じています。多分私はそれを完全に間違って設計し、チェックする必要があるのはDALにありますか?私はすっごく混乱しています...

最後に、インスタンスを作成せずに他のクラス/フォーム/エンティティからシステムオプションを呼び出すことができるように、システムオプションを静的クラスに配置する必要がありますか?

フィードバックや批判を歓迎します。文法上の問題についてお詫びします。英語は私の第一言語ではありません。

4

1 に答える 1

0

私が正しく理解していれば、それはインフラストラクチャ層であり、問​​題は特定のビジネス問題を解決する前にランタイムを正しく設定する方法である場合の部分です。

エンティティの編成の可能な方法を次に示します。

UI フォームは、構成ソース (xml ファイル) からモデルをロードし、ドロップダウン コントロールを表示します。RuntimeConfigurationServiceユーザーの反応により、 のようなメッセージを に送信しますRuntimeConfigurationService.SettingsChanged

データを保存する方法は、BLL とは直接関係がないと思います。そのようにして、RuntimeConfigurationService をアプリケーション インフラストラクチャ レイヤーの一部として示します。

RuntimeConfigurationService は次のことを行うことができます。

SettingsChanged(name) {
    DBProviderName = name;
    DBProviderFactory = CreateFactory(name);

    CreateFactory(name) {
        switch(name)
         case "sql": return new SQLProviderFactory();
         case "oracle": return new OracleProviderFactory();
    }
}

どちらのファクトリもIProvider Create();独自の方法でメソッドを実装します。

次に、BLL などのクラスがプロバイダーを必要とする場合、 を呼び出し、インターフェイスをRuntimeConfigurationService.DBProviderFactory.Create()取得して使用します。IProvider

RuntimeConfigurationService は、静的またはシングルトンのいずれかです。

依存性注入を使用する場合は、「IOC.Register.To(RuntimeConfigurationService.DBProviderFactory.Create())」のように IProvider を登録できます。

于 2012-06-01T15:24:53.070 に答える