私のC#/ ASP.NETプロジェクトには、特定のカテゴリの動作を持つオブジェクトがあります。各動作カテゴリは物理的にルートオブジェクトに依存していますが、コードを読みやすくするために、カテゴリを明確に区別したいと思います。私の実装が、同じ問題を解決するために他の人が書いたものとどのように比較されるかを見るのは興味深いと思います。
以下の例では、Webサイトのさまざまな場所へのURLを生成するクラスがあります。Webサイトには、ホームページなどのURLとは異なる方法でアクセスする必要がある独自のリンクセットを持つストアフロントがあります。
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);
}
}
このコードを使用すると、次のようになります
WebsiteURLs website;
Console.WriteLine(website.Store.BestSellers);
ロバート:
例自体は、機能をより明示的に整理しようとしていることに気付いた1つのシナリオにすぎません。関連するメソッドの前後にプレフィックスを使用していることに気付いたことがありますか。String.TrimStart()、String.TrimEnd()、String.Trim()は、C#フレームワークから思い浮かぶ例です。
上記のコードを(読みやすさの観点から)整理しようとすると、ネストされたクラスが外部クラスのメンバーにアクセスできないという問題があります。WebサイトURLインスタンスの参照をStoreURLsクラスのコンストラクターに渡す必要があるため、内部クラスの構築に余分な作業が必要です。このクロージャの動作は、言語。関連する機能がたくさんある状況で他の人がどのC#コードを使用するのか興味があります(数十または数百のメソッドを考えてください)。(注:上記のコードは、ネストされたクラスが外部クラスのメンバーにアクセスできるJavaで記述する方がはるかに流動的です)。