1

これが何らかの方法で可能かどうかはわかりませんが、基本クラスから継承する開発者に、このクラスのすべてのメソッドに特定のパラメーターを実装するよう強制することを試みています。

何かのようなもの:

class SomeClass : BaseClass
{
     public void SomeMethod(bool iAmAForcedParameter = false)
     {

     }
}

この理由は、MVC プロジェクト (フロントエンド) から呼び出すことができるサービス、または他のサービスから使用できるサービスがあるためです。サービスがフロントエンドから呼び出される場合は、すべてが完了した後に変更をデータベースに書き込む必要があります。サービスが別のサービスから使用される場合、(メモリ内で) 変更を行うだけで、データベースには書き込まないでください。

私が考えているもう 1 つのアイデアは、呼び出し元が誰であるかを判断することです。呼び出し元が特定のタイプの場合、メソッドはデータを送信すべきではありません。ただし、これを行う方法や、パフォーマンスに大きな影響を与えずにこれが可能かどうかはわかりません。

ご挨拶と事前にご協力いただきありがとうございます。

4

3 に答える 3

1

このクラスのすべてのメソッドに特定のパラメーターを実装します。

クラスのプロパティを探しているだけだと思います。これをすべてのメソッドでチェックインできます。

于 2013-02-28T09:14:30.077 に答える
1

それぞれのメソッドに 2 つの責任があるのは奇妙です。むしろ、2 つの派生クラスを作成したいと思います。1 つはデータベースにデータを永続化するメソッドを備えたもので、もう 1 つは次のことを行わないものです。

class SomeInMemoryClass : BaseClass
{
   public override void SomeMethod() {}
}

class SomeSqlClass : BaseClass
{
   public override void SomeMethod() {}
}

とにかく、ブール値をメソッドに渡すのはデザインの匂いです。メソッドが 2 つのことを行うことを示しています。呼び出し元に何をしているかを伝える 2 つのメソッドを用意することをお勧めします。

void SomeInMemoryMethod()
void SomeSqlMethod()

それよりもメンテナンスしやすいと思いませんか?

void SomeMethod(false)

最後の編集について:SomeInMemoryClassデータをデータベースに保存しないタイプにオブジェクトを渡します。他のタイプはSomeSqlClassインスタンスを使用する必要があります。

于 2013-02-28T09:15:26.250 に答える
0

第二部もわかりません。

最初のアイテムには、

public void SomeMethod(bool iAmAForcedParameter)

したがって、オプションの引数はありません。

とにかくオプションの引数が必要な場合は、

public void SomeMethod(bool iAmAForcedParameter)
{
    SomeMethodX(iAmAForcedParameter)
}

public void SomeMethodX((bool iAmAForcedParameter = false)
于 2013-02-28T09:18:43.460 に答える