当社では、複数のモジュールで構成されるアプリケーションを開発しています。アーキテクチャはほぼ定義されていますが、プレゼンテーション層について少し考えています。ぜひご意見をお聞かせください。アーキテクチャは次のとおりです。
Foreachモジュールでは、いくつかの名前空間を作成し、それらは独自のクラスライブラリにコンパイルされます。したがって、CRMモジュールでは、次のものを作成します。
- ProductName.CRM.ServiceLayer(CRMモジュールのservicecontractsインターフェイスを保持します)
- ProductName.CRM.ServiceLayer.Implementation(CRMモジュールのサービスレイヤーインターフェイスを実装します)
- ProductName.CRM.BusinessLayer(CRMモジュールのビジネスコンポーネントを保持します)
- ProductName.CRM.BusinessLayer.BusinessObjects(CRMモジュールのbusinessObjectsを保持します)
- ProductName.CRM.DataLayer(CRMモジュールのDAOインターフェイスを保持します)
- ProductName.CRM.DataLayer.SqlServer(CRMモジュールのデータレイヤーインターフェイスを実装します)
モジュールFinance、HRM、Supplyなどのクラスライブラリと同じ構造を作成します。
- ProductName.Finance...。
- ProductName.HRM...。
- など。私はあなたが今のところアイデアを得ると思います:)
また、「横断的関心事」についても考え、そのために次の名前空間とクラスライブラリを作成します。
- ProductName.Framework.ExceptionHandling
- ProductName.Framework.Logging
- ProductName.Framework.Security
- etcetra..。
これが私たちのアーキテクチャのこれまでの経緯であり、現時点では、PresentationLayerを設定するための適切な方法を見つけようとしています。たとえば、各モジュール(ProductName.CRM.PresentationLayer、ProductName.Finance.PresentationLayerなど)のPresentationLayerライブラリを作成する必要があります。そして、他のすべてのModule.PresentationLayer-librariesへの参照を持つ全体的なProductName.PresentationLayer-libraryを作成します。この全体的なProductName.PresentationLayerには、ログイン/メインフォーム機能と、モジュールPresentationLayerの1つに実装されているフォームを開始する機能があります。これは、他のモジュールへのアプリケーションのエントリポイントのようになります。
または...
すべてのモジュールのすべてのフォームを含むProductName.Presentation-libraryを1つだけ作成する必要があります。そうすることで、他のフォームに簡単に移動でき、モジュールが相互にフォームを使用するときにモジュール間の参照について心配する必要がなくなります(場合によってはそうなります)。
最初の解決策は私には良いと思います。ただし、異なるモジュールのフォームが相互にナビゲートする場合、この種の機能は、2つのうちの一方だけが他方を参照できるため、実装が困難になります。
私が扱っているこの問題についてのあなたの意見を本当に聞きたいです、そして多分誰かが私が使うことができる適切な解決策または考えを私に与えるかもしれません。
よろしくお願いします、乾杯!