ここで私が私のものを作った例
これはメソッドの最初のセットになります
[ServiceContract]
public partial interface IDefaultInterface
{
[OperationContract]
string getData1();
}
public partial class CDefaultClass : IDefaultInterface
{
public getData1(){ return "data 1"; }
}
これは、分割したい別のメソッドのセットになります
[ServiceContract]
public partial interface IDefaultInterface2
{
[OperationContract]
string getData2();
}
public partial class CDefaultClass2 : IDefaultInterface2
{
public getData2(){ return "data 2"; }
}
以下は、コメント付きの私の派生ロジックです
namespace wcfMyService
{
// this list all derivation for the easy to follow service.
// this service will have LOTS of function so ability
// to split in multiple classes was necessary
// on client side we only see 1 set of function all mixed together
// but at least working on it it's easy to follow for us since we have a structure
#region Class Derivation
public class CDerivative : CDefaultClass { }
public partial class CDefaultClass : CDefaultClass2 { }
// NOTE THAT ALL NEW CLASSES MUST :
// - Be PARTIAL classes
// - Implement their OWN interface
// new class would be
// public partial class CDefaultClass2 : CMyNewClass { }
// and so on. previous class derive from the new class
#endregion
#region Interface Derivation
[ServiceContract]
public interface IDerivative : IDefaultInterface { }
public partial interface IDefaultInterface : IDefaultInterface2 { }
// NOTE THAT ALL NEW INTERFACE MUST :
// - Be PARTIAL Interface
// - Have attribute [ServiceContract]
// - all methods need [OperationContract] as usual
// new class interface would be
// public partial interface IDefaultInterface2 : IMyNewClass { }
// and so on. previous class interface derive from the new class interface
#endregion
}
通常のサービス インターフェイスでは、派生 AND インターフェイスを追加するだけで、エンド ポイントがすべての派生クラスのすべての関数を参照できるようになります。クラスは個々のインターフェースから独自のメソッドを実装するため、内部にコードは必要ありません。したがって、各クラスに数百万のメソッドのクラスターはありません
[ServiceContract]
public interface IService : IDerivative
{
}
最後に、SVC/ASMX (何でも) を次のようにコーディングして、WSDL などのすべてを公開する必要があります。このクラスでもコードは必要ありません
public partial class Service : CDerivative, IService
{
}
したがって、全体として、より良い構造のために別のクラスに新しいメソッドが必要な場合に必要なことは、通常サービス コントラクトと操作を作成する場合と同様に、部分インターフェイスと部分クラスを作成するだけです。次に、派生ファイルに移動して、インターフェイスとクラスを派生に追加します。それらはすべて独自のインターフェイスのみを実装しているため、衝突は発生しないはずであり、コーディングすると、他のクラスのメソッドが表示されることはありません。
私はこの構成がとても好きで、適切なフォルダで素敵なツリー ビューを作成しており、そこにある何千ものメソッドの中からすぐに見つけ出すことができます。