1

これはまったく不可能かもしれませんが、アイデアをあきらめる前に、あなたの回答を得られると思いました.

インターフェイス、ロジック、データ アクセスの 3 つの主要プロジェクトがすべて 1 つのソリューションに含まれています。データ アクセス プロジェクトには、変数とメソッドを含むすべてのオブジェクト クラスが含まれています。ロジック プロジェクトには、ロジック メソッドを保持するクラスと、データ アクセス プロジェクトからのオブジェクトの保存と読み込みを処理する 2 つのクラスが含まれています。インターフェイス プロジェクトはユーザー インターフェイスであり、ここにある必要がある/ロジック層にある必要のないクラスとメソッドです。

明確な分離を維持し、インターフェイス --> ロジック --> データ アクセスと同じ方法で通信を維持することを意図しました。これで問題ありませんが、残念ながら、インターフェイスがデータ アクセス クラス オブジェクトがその値と共に渡されることを理解するには、インターフェイス プロジェクトにデータ アクセス プロジェクトへの参照を追加する必要があります。

うまくいけば、私はまだ誰も失っていませんか?

インターフェイスがデータ アクセス プロジェクトから値を読み取れるようにすることは明らかに問題ありませんが、インターフェイス プロジェクトがメソッドを呼び出すことは望ましくありません。これらはすべて特定の方法でロジック レイヤーを介して処理されるためです。これは設計時の問題であることはわかっていますが、メソッドを特定のプロジェクトから呼び出せないように設定することはできますか?実行時にどのプロジェクトがメソッドを呼び出しているかを把握したくありません。これは遅すぎるためです。

これはやり過ぎの質問のように聞こえるかもしれませんが、会社にリリースされた後にこれに取り組んでいる開発者は私の同僚と私だけではない可能性があるため、他の開発者にはソリューションとプロジェクトの厳格なガイドラインと構造に従うことを望んでいます. 私たちはそれをすべて書き留めて、アプリケーションに取り組む前に彼らがそれを読むように努めることができますが、私たち全員が知っているように、あなたが何かに取り組むことを緊急に求められた場合、他の開発者の技術を読む時間があるという保証はありません.最初にアプリケーションに関する仕様。

解決策を見つけるためにさらに情報が必要な場合は、質問してください。

どうもありがとうございました。

ルイス・ラッセル

4

6 に答える 6

2

属性を使用InternalVisibleToして、アクセスを制限するメソッドをマークできますinternal

注:あなたの場合、私はこれを使用しません。デザインを考え直したほうがいいと思います。ドメイン オブジェクトが「データ アクセス プロジェクト」に配置されているのは少し奇妙に思えます。UI プロジェクト、ロジック プロジェクト、データ アクセス プロジェクト、モデル プロジェクトがないのはなぜですか?

于 2009-09-29T08:56:23.760 に答える
2

最上位層 (ユーザー インターフェイス) が最下位層 (データ アクセス) から型を参照できるようにするため、問題が発生します。これをしないでください。

代わりに、ユーザー インターフェイスがプログラムする必要があるいくつかの抽象化 (インターフェイスまたは基本クラス) を定義します。これらの抽象化は、ロジック レイヤーまたは新しいライブラリに配置できます。

データ アクセス ライブラリは、これらの抽象化を実装する必要があります。

依存関係の挿入 (DI) を使用すると、実行時に実際のデータ アクセス ライブラリをユーザー インターフェイスに挿入できます。これら 2 つの間のハード参照は実際にはありません。

これは手動で行うことも、Castle Windsor などの DI コンテナーを使用して依存関係を結び付けることによって行うこともできます。

于 2009-09-29T09:04:19.413 に答える
1

データ ストレージ クラス (つまり、渡すクラス) を、データ アクセス プロジェクトとインターフェイス プロジェクトの両方によって参照される別のプロジェクトに抽象化できます。その後、インターフェイス プロジェクトからデータ アクセス プロジェクト参照を削除できます。

于 2009-09-29T09:00:22.823 に答える
0

依存性注入のためにManaged Extensibility Frameworkをチェックアウトする必要があります....

于 2009-09-29T08:56:19.307 に答える
0

通常はこれをお勧めしませんが、StackTrace を調べて親レベルのオブジェクトが何であるかを確認するデバッグ時間チェックをいつでも追加できます。基本的に、(関連するタイプのアセンブリをチェックすることによって) 上のレベルに遭遇するまでトレースを上っていきます。それを発見しなかった場合 (つまり、最上位のアセンブリに到達した場合) は、例外をスローします。 .

これがデバッグ専用である理由は、事実上冗長なコードでリリース アプリケーションに負担をかけたくないからです。

于 2009-09-29T08:56:22.123 に答える
0

これらのインターフェイスはロジック プロジェクトに配置した方がよいでしょうか。ドメイン駆動設計のようないくつかの考え方を見ると、データ アクセスへのインターフェイス (DDD の場合のリポジトリ インターフェイス) は、実際には (データ層ではなく) ドメイン (別名ロジック) の問題の一部であり、多くの場合、別のプロジェクト。

于 2009-09-29T08:56:46.043 に答える