私のC#/ ASP.NETプロジェクトには、特定のカテゴリの動作を持つオブジェクトがあります。それぞれの行動カテゴリは物理的にはルートオブジェクトに依存していますが、コードの読みやすさを高めるために、カテゴリを明確に区別したいと思います。同じ問題を解決するために他の人が書くかもしれないものと私の実装がどのように比較されているかを見ることは興味深いと思います。Beautifying C#構文
以下の例では、私はウェブサイト上の別の場所にURLを生成するクラスを持っています。ウェブサイトには、ホームページなどのURLとは別の方法でアクセスする必要があるリンクがあります。次
WebsiteURLs website;
Console.WriteLine(website.Store.BestSellers);
ロバートのようになり、このコードを使用して
public class WebsiteURLs
{
// One category of urls on the website is the store.
public class StoreURLs
{
private WebsiteURLs _website;
public class StoreURLs(WebsiteURLs website)
{
_website = website;
}
public string BestSellers
{
get { return _website.ResolveURL("~/store/bestSellers.html"); }
}
}
private StoreURLs _store;
public StoreURLs Store // property for generating store urls
{
get
{
if (_store == null) {
_store = new StoreURLs(this);
}
return _store;
}
}
public string Homepage
{
get { return ResolveURL("~/default.aspx"); }
}
// .. Other Categories Here
protected string ResolveURL(string url)
{
return HttpContext.Current.Response.ApplyAppPathModifier(url);
}
}
:
例自体は、私は自分自身をより明示的な機能を整理しようとして発見した唯一のシナリオです。関連するメソッドの接頭辞を使って自分自身を見つけたことはありますか? String.TrimStart()、String.TrimEnd()、String.Trim()は、C#フレームワークから気になる例です。
上記のコードを(可読性の観点から)組織化しようとすると、ネストされたクラスが外部クラスのメンバーにアクセスできなくなるという問題があります。 WebURLインスタンスのリファレンスをStoreURLsクラスのコンストラクタに渡す必要があるため、内部クラスの構築には余分な作業が必要です。このクロージャの動作は、言語。私は、C#コードの他のものが関連する機能がたくさんある状況(数十、数百のメソッドを考える)で、どのようなものを使用するのか不思議です。 (注:上記のコードは、ネストされたクラスが外部クラスのメンバーにアクセスできるように、Javaで書き込む方がはるかに柔軟です。
(文字列は文句を言わない、それまで評価されるので)あなたの自動コンパイル時に名前の確認ではなく、ランタイムを提供します複雑さを軽減する。我々は、より固いソリューションに目を向けるべきです。冗談を言って、私は地域がフラッシングせずに便座を置くようなものだと聞いた。すべての鯉のコードはまだそこにあるので、良いアナロジーは、あなたが好きならそれを見ないことを選択することができます。このアプローチには強くお勧めします。 –