2

私はコードを直接探しているわけではありませんが、私の問題を最もよく解決する方法についていくつかのアイデアを探しています。

私が取り組んでいるこのasp.net mvcアプリケーションがあります。それは「高度にモジュール化」されるべきであり、多くの部品は異なるプロジェクト間で再利用されなければなりません。

現在のアプローチでは、Managed Extensibility Framework を使用して実行時にアセンブリをインポートしています。これらは通常、作業に必要なすべてのもので構成されています。モデル、ビュー、コントローラー。ルートとナビゲーション/メインメニューボタンは、インポート時に登録されます。これは今のところ機能します。たとえば、「ニュース コラム」アセンブリを他のプロジェクトに単純にコピーし、MEF を含めると、「魔法のように」新しいプロジェクトが /News/List でアクセス可能なニュース機能を提供します。

ただし、問題は、ほとんどの場合、アセンブリ内で提供される既定のビューが適合する一方で、インポートされたコントローラーを別のビューで表示して、他のフィールドをカスタム レイアウトで表示したい場合があることです。私の現在のアプローチは、モジュール内のアクション メソッドを仮想化することです。別のプロジェクトでカスタム ビューを使用してリストをレンダリングする必要がある場合は、リスト メソッドをオーバーライドし、基本メソッドを呼び出して ViewData を埋めてから、必要なビューを呼び出すだけです。しかし、これはどういうわけか汚れているように感じます。誰かがより良い解決策を知っていれば、本当に感謝しています。

私が直面しているもう 1 つの問題は、インポートしたモデルを別のテーブルで動作させたいということです。ターゲット テーブルが ClassMap 内で定義されている Fluent NHibernate を使用します - Table("News")。マッピングは次のようにインポートされます。

foreach(Assembly assembly in assemblies)
  configuration.Mappings(m => m.FluentMappings.AddFromAssembly(assembly));

インポートされたマッピングのテーブルを変更する方法がわかりませんでしたが、簡単な方法があると思いますか?

少なくともこれを読んでくれてありがとう:)

4

1 に答える 1

0

コントローラーのアクションをオーバーライドすることが「汚い」と感じるべきではないと思います。実際、ユーザー認証のように簡単に抽象化できるものには、共通ライブラリのベース コントローラー アクションを使用します。反対に、認証は通常 UI に非常に固有であるため、再利用可能なビューを作成する必要はありません。

また、EF コンテキストの作成/破棄などを処理するために、アプリ内に基本コントローラー クラスを作成します。

データ アクセスの抽象化を検討することをお勧めします。NHibernate を使用していて、標準の実装で特定の DB スキーマを使用している場合でも、コードの再利用に関するかなり古典的な問題に直面しています。つまり、再利用可能なパッケージに特定のロジックを入れすぎます。原則として、再利用可能なコードにデータベース固有のものを含めないようにしています。私は POCO オブジェクトとインターフェイスを使用しているので、あらゆるタイプのデータ ソースを使用してオブジェクトを作成できます。次に、SQL サーバー、EF、好みの DB スキーマなどを使用した標準実装を備えた別のアセンブリを作成する場合があります。ただし、それを別のものに接続する必要がある場合は、新しいバージョンで単純にインターフェイスを実装します。

それがあなたの質問に答えることを願っています。

于 2012-02-25T17:14:24.667 に答える