8

顧客からの複雑な要求により、コードが乱雑になることがあります。前回の作業以降に書いたものを読んで理解するには時間がかかりますが、時間がかかります。

誰かが時間を節約し、コードをより整理して読みやすくする優れたデザインパターンを実装したかどうか疑問に思っていました.

4

3 に答える 3

9

IPlugin を実装する基本プラグインを持つことは、正しい方向への良い一歩です。その Execute 関数は、IServiceProvider だけでなく、dataContext または OrganizationService を抽象的な onExecute メソッドに渡すことができます。このメソッドは、仮想エラー ハンドラー メソッドで try catch にラップされます。これにより、多くの繰り返し定型コードが不要になります...

編集1

抽象 OnExecute と仮想エラー ハンドラーを示すコード例を追加しました。

public abstract class PluginBase : IPlugin
{

    public void Execute(IServiceProvider serviceProvider)
    {
        try
        {
            OnExecute(serviceProvider);
        }
        catch (Exception ex)
        {
            bool rethrow = false;
            try
            {
                OnError(ex);
            }
            catch
            {
                rethrow = true;
            }

            if (rethrow)
            {
                throw;
            }
        }
        finally
        {
            OnCleanup();
        }
    }

    // method is marked as abstract, all inheriting class must implement it
    protected abstract void OnExecute(IServiceProvider serviceProvider);

    // method is virtual so if an inheriting class wishes to do something different, they can
    protected virtual void OnError(Exception ex){
        // Perform logging how ever you log:
        Logger.Write(ex);
    }

    /// <summary>
    /// Cleanup resources.
    /// </summary>
    protected virtual void OnCleanup()
    {
        // Allows inheriting class to perform any cleaup after the plugin has executed and any exceptions have been handled
    }
}

編集 2

DLaB.Xrm.Plugin 名前空間の DLaB.Xrm (Nuget 上) で定義されたプラグイン ベースがあり、多くの優れた機能を処理できます。 これは、プラグイン クラスの例で、その使用方法を示しています

于 2012-06-19T16:35:37.403 に答える
2

遅れるかもしれませんが...

Visual Studio 用のプラグイン テンプレートがいくつかあり、それらのサンプルから最適なものを見つけることができます。

私のお気に入りの 1 つ: http://pogo69.wordpress.com/2011/04/15/crm-2011-visual-studio-plugin-templates/

とにかく、最終的にはロジック設計が改善され、より良くなることを知っておく必要があります。必要なのは練習だけです。

よろしく!

于 2013-03-12T19:25:15.383 に答える