これらすべての null を処理し、チェックとアサートをスローし、代わりに流暢な API を使用してこれを処理する汎用拡張機能を構築することを考えています。
というわけで、こんなものを作ろうと思っています。
Shall() - Not quite sure about this one yet
.Test(...) - Determines whether the contained logic executed without any errors
.Guard(...) - Guards the contained logic from throwing any exception
.Assert(...) - Asserts before the execution of the code
.Throw(...) - Throws an exception based on a certain condition
.Assume(...) - Similar to assert but calls to Contract.Assume
使い方: Father.Shall().Guard(f => f.Shop())
問題は、実行時にこれらの余分な呼び出しをしたくないということです。AOP がこれを解決できることはわかっています。これらの呼び出しを呼び出し元に直接インライン化したいのですが、それを行うより良い方法がある場合は教えてください。
さて、私が何かを研究したり実行したりする前に、誰かがすでにそれを実行しているか、それを実行しているツールを知っているかどうか疑問に思いますか?
私は本当にそのようなものを構築して一般に公開したいと思っています.
いくつかの例。
DbSet<TEntity> set = Set<TEntity>();
if (set != null)
{
if (Contains(entity))
{
set.Remove(entity);
}
else
{
set.Attach(entity);
set.Remove(entity);
}
}
以下に変更します。
Set<TEntity>().Shall().Guard(set =>
{
if (Contains(entity))
{
set.Remove(entity);
}
else
{
set.Attach(entity);
set.Remove(entity);
}
});
冗談を言ったり他の人をからかったりする代わりに、成熟について本当に何かを学ぶことができる人もいます。あなたの経験を共有し、それについて何が良いか悪いかを教えてください。私はそれを受け入れます.
コード コントラクトを再作成しようとしているわけではありません。それが何であるかはわかっています。毎日使用しています。記述されているボイラープレート コードを 1 か所に移動しようとしています。
呼び出しごとに返されたオブジェクトをチェックする必要があり、コードではないメソッドがある場合があるため、呼び出し先が null にならないことを保証できないため、呼び出し元で返されたオブジェクトに対して null チェックを実行する必要があるため、呼び出しをチェーンするときにこれらのチェックを簡単に実行できるようにするものを考えました。
更新:もう少し考えて、意図を明確にし、コードを読みやすくするために API を変更する必要があります。
アイデアはまったく洗練されておらず、実際、これらすべての方法は行き過ぎていると思います。
ともあれ、とりあえず置いておきます。