0

認証ロジックをカプセル化するために、再利用可能なクラスライブラリを構築しました。コンパイルされた*.dllを複数のプロジェクトで再利用できるようにしたい。

私が持っているものは作品です。しかし、私がどのように参照を作成しているか、または私のクラスライブラリがどのように構造化されているかについての何かは完全に正しくありません。そして、私がしていることを理解するためにあなたの助けが必要です-間違っている/理解していない...

次のように構成されたクラスライブラリ(Authentication.dll)があります。

namespace AUTHENTICATION
{
    public static class authentication
    {
        public static Boolean Authenticate(long UserID, long AppID) {...}

        //...More Static Methods...//    
    }
}

依存プロジェクトでは、Authentication.dllへの参照を追加し、usingディレクティブを追加しました...

using AUTHENTICATION;

この構造を使用すると、依存プロジェクトからAuthenticateメソッドを呼び出すことができます...

authentication.Authenticate(1,1)

その「認証」を含める必要がないようにしたいと思います。このクラスライブラリからメソッドを呼び出す前に。それは可能ですか?その場合、クラスライブラリにどのような変更を加える必要がありますか、または依存プロジェクトでどのように実装していますか?

4

7 に答える 7

3

これを実現する唯一のオプションは、依存プロジェクトで継承する認証アセンブリで基本クラスを宣言することです。

Authenticateを保護されたメソッドとして公開し(またはパブリックも機能します)、クラス名を指定せずに呼び出すことができます。

public class MyClassInDependentProject : authentication
{
    public void DoSomething(int userId, long appId)
    {
        var success = Authenticate(userId, appId);
        …
    }
}

そうは言っても、これは悪い設計であることがすぐにわかります。これにより、横断的関心事が他のあらゆる種類のクラスと混同され、それらのクラスは他のクラスから継承できなくなります。

構成はオブジェクト指向プログラミングのコア原則であり、「継承よりも構成を優先する」というイディオムがあります。これは単に、複雑さを管理可能なチャンク(オブジェクトとしてインスタンス化されるクラス)に分解し、それらのオブジェクトを一緒に構成して複雑な処理を処理することを意味します。したがって、認証のいくつかの側面をクラスにカプセル化し、それを他のクラスに構成的に提供して、認証に使用できるようにします。概念的には、何かを実行できるオブジェクトとして考えると役立ちます。

例えとして、机の上に穴を開ける必要があると考えてください。あなたはドリル(オブジェクト)をあなたのオフィス(クラス)に持ち込みます。その時点で、単に「オン」と言うのは意味がありません。「オン」は、ファン、ランプ、PCなど(クラス内の他のオブジェクト)によって処理される可能性があるためです。「ドリルオン」を指定する必要があります。

于 2012-08-30T14:00:22.377 に答える
3

C# では、関数はクラスなしでは存在できません。したがって、静的メソッドのクラスまたはオブジェクトメソッドのオブジェクトなど、常に何かを定義する必要があります。

于 2012-08-30T13:57:02.447 に答える
2
  • C#でクラスライブラリを作成する場合は、既存の命名規則の使用方法を学ぶ必要があります。クラスライブラリを開発するための設計ガイドライン

  • 名前空間に名前を付ける方法は次のとおりです。https ://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/interface

  • C#もオブジェクト指向言語であるため、クラスが必要です(クラスにAuthentication名前を付ける必要があるために使用します)。

  • また、データソースがハードコーディングされているようです。クラスライブラリのユーザー(自分だけの場合でも)は、データソースを構成することをお勧めします。

  • シングルトンについてのGoogleと、それが今日のアンチパターンと見なされる理由(ほとんどの場合)。

于 2012-08-30T14:04:03.663 に答える
1

メソッドを呼び出すには Class を使用する必要があります。

NameClass.Methodだけの静的クラスはいつですか

静的でない場合は、インスタンスを作成する必要があります。ClassName ob = new ClassName(); ob.Method();

于 2012-08-30T13:58:08.687 に答える
1

このような呼び出しの形式はclass.methodであり、「using」指定があっても「class」モニカを使用してエスケープすることはできません。何かが関数を「ホスト」する必要があります。

于 2012-08-30T13:58:13.670 に答える
1

ジェイが言及した基本クラスメソッドを使用しないと、あなたが求めていることは不可能だと思います。ただし、呼び出すたびに構文を単純化することAuthenticate()だけが必要な場合は、このばかげた解決策 (認証を実行する必要がある各クラスに追加のメソッドを追加する) が必要な場合があります。

private static void DoAuth(long UserID, long AppID){
    authentication.Authenticate(UserID, AppID)
}

ID が何らかのコンテキスト内で常に同じである場合は、それをオーバーロードすることもできます。

private static void DoAuth(){
    DoAuth(1,1)
}

はい、これ、認証を行いたい場所にコードを追加する必要があることを意味します (それがばかげている理由です! ;))。ただし、これも削減します。

authentication.Authenticate(1,1);

...これに:

DoAuth();

これの費用対効果の分析はあなたに任せます..

于 2012-08-30T14:22:23.720 に答える
0

私は約3年遅れていることを知っていますが、ここでは何も起こりません。

コードをよりクリーンで読みやすく保つために、必要なすべての再利用可能なコード用に新しい名前空間を作成する必要があります。次に、その名前空間に認証クラスと認証機能があります。

これを使用するには、名前空間に using を簡単に設定し、好きなように関数を使用できます

Authentication.Authenticate()

しかし、使用するには

Authenticate()

それ自体で、いつでも MyNamespace.Authentication; を使用して行うことができます。コードで Authenticate Function を直接使用します。

于 2016-04-11T08:58:07.133 に答える