1

私はこのインターフェースを持っています...

public interface ICheckThatDocumentExistsCommand
{
   bool Execute( string userId, string docId );
}

実装では、2つのIDのみを検証し、有効な場合は別のインターフェイスの結果を返します...

public interface ICheckThatDocumentExistsCommand
{
   bool Execute( UserId userId, DocumentId docId );
}

同じビジネスドメインアセンブリでインターフェイスを定義したいのですが、2つ(またはそれ以上)のレイヤーを区別する方法を決定するのに苦労しています。論理的には、名前が同じではないにしても類似していると思うので、同じ名前空間の下に置くことはできません。名前空間を介して分離しますか?「Validation」名前空間と「Something-else」名前空間?または、すでに単語の名前を少しばかげた名前に拡張しますか...

public interface IValidateIdsAndThenCheckThatDocumentExistsCommand

機能を小さく、単一目的に保つにつれて、これがますます出てくるのを見ています。

4

3 に答える 3

2

さて、パラメータをどう処理するかを理解している実装クラス....だから、実装クラスに型を決定して検証させてみませんか....

public interface ICheckThatDocumentExistsCommand
{
  bool Execute<t1,t2>(t1 userID, t2 docId);
}
于 2011-10-05T22:53:06.237 に答える
1

コマンド パターンを使用する場合、珍しい問題ではありません。通常、コマンド名はせいぜい 4 語か 5 語に留めることができますが、場合によってはもっと長いものが必要になることもあります。

同じ名前の 2 つのインターフェイスに頭痛の種が見られます。

  1. 両方のアセンブリを参照するクラスは、完全修飾クラス名を使用する必要があります。
  2. ソース管理は、ファイル名がクラス名と一致していると仮定して、頭の中でファイルをまっすぐに保つことに頭を悩ませています (今、どのファイルをマージしていますか?)。
  3. Resharper の GoTo Type には、常に追加の手順が必要です。

最初のインターフェースによって行われる余分な作業が名前に反映されるべきであることに同意します。あなたの提案は機能しますが、次のように短縮できます

IValidateIdsAndCheckForDocumentCommand

それほど長くはありません。:)

于 2011-10-05T23:00:16.453 に答える
1

ティムの答えは頭がいいので好きです。トーマスの答えは、彼が明らかにその領域を知っているので好きです。

私だったら、おそらく別の名前空間を使用するでしょう。

于 2011-10-06T05:01:59.060 に答える