4

PER-FILE/プロジェクト項目ごとにコンパイラ定数を定義することはできますか?

背景: すべての読み取りタスクと書き込みタスクを分離するデータベース アブストラクション レイヤー (DAL) を実現したいが、同じメソッドを複数回実装することなく、両方を実行できる DAL を保持したい (抽象クラスは 1 つのインスタンス クラスがあることを意味する)サポートされているすべてのデータベース タイプに対して)。

だから私はこのように私のDALを分離したい:

abstract class ReadDAL
abstract class WriteDAL
abstract class ReadWriteDAL (multiple-inheritance from Read&Write-DAL).

残念ながら、C# は多重継承をサポートしていないため、これは機能しません。

したがって、この問題を回避する 1 つの方法は、インターフェイスを定義することです。

abstract class ReadDAL : IReadDAL
abstract class WriteDAL : IWriteDAL
abstract class ReadWriteDAL : IReadDAL, IWriteDAL

ただし、これを行うと、DAL のいずれかでメソッドを変更するたびにインターフェイス定義を変更し、ReadWriteDAL で定義されたメソッドを変更する必要があり、メソッドの実装をどこかにコピー アンド ペーストする必要があります。 DRY 非準拠の混乱が発生します。

私ができることは、同じファイルをリンクとして 2 回追加し、プロジェクト項目ごとに定義することだと考えました。

#if SOMECONSTANT // true if file is PartialReadDAL.cs
public partial abstract class ReadDAL
#else // false if "file" is link called "PartialReadWriteDAL.cs" symlinking to PartialReadDAL.cs
public partial abstract class ReadWriteDAL
#endif 
and here some implementation. 

しかし、どうにかしてファイルごとにコンパイラ定数を定義できますか?
または、何らかの方法で同様の効果を達成しますか?

4

1 に答える 1