N 2 MS Mvc Examples学習記録(2)–モデルクラス
13909 ワード
モデルクラスを検討すると,全部で6つのクラスがあり,それらはすべて含まれている内容を表している.
1. AbstractPage
この抽象クラスは、ページで表示されるすべてのコンテンツ項目を表します.WithEditableTitleプロパティでは、このようなTitleプロパティを編集できます.WithEditableNameでは、このようなNameプロパティを編集できます.定義した読み取り専用プロパティPreviewUrlは、Url値を直接返しますが、何の役にも立たないようです.
2. ContentPage
このクラスは,文字コンテンツのあるコンテンツ項目,すなわちコンテンツを持つことを表し,これは仮想的なText属性によって取得・設定される.Definitionプロパティは、ContentPageに特別な設定を指定するために使用されます.最初のパラメータはそのタイトル(N 2管理インタフェースに表示され、ページを新規作成および編集するときに表示されます)、2番目のパラメータは、N 2がこのWebサイトをインストールするときにContentPageを開始ページとして選択できるようにするプロパティInstallerを設定します(インストールの2番目のステップで表示されます).この特性ではなく、より正確なPageDefinitionで代用したほうがいいです.ContentPageクラスで定義されたTextプロパティのEditableFreeTextAreaプロパティは、TextプロパティがN 2でリッチテキストエディタで編集できることを示しています.getメソッドとsetメソッドは、実際にはより省略できます.
3. NewsPage
NewsPageはニュースの内容を表し、RestrictParentsによって親ノードがNewsContainerクラスであることを制限します.そのコンストラクション関数ではVisibleプロパティをfalseに設定し、ドキュメントを表示すると、ニュースページがサイトマップに表示されないことがわかります.もちろん、ナビゲーションに表示されないこともできます.また、ニュースにはコメントがあるので、GetCommentsメソッドはすべてのコメントを返します.これは、NewsPageがコメントの親ノードであることを示しています.
4. NewsContainer
ニュースコンテナクラスは、GetNewsメソッドによって実現されるすべてのニュースをリストする役割を果たします.
5. CommentItem
ニュースのコメントを表示するので、RestrictParentsプロパティが制約されています.また興味深いことに、個別のページに表示すべきではないので、IsPageプロパティを書き換え、常にfalseに戻るようにしました.他の属性は説明する必要はありません.
6. TextPart
このクラスは抽象的なAbstractPageから派生するのではなく、ContentItemクラスから直接派生し、WebFormのユーザーコントロールと同様にページテンプレート(ASPX)ではなくASCXテンプレートで表示されるPartDefinitionプロパティを使用して修飾されています.これにより、異なるページで再利用できます.具体的な使用はまだ検討されていない.
1. AbstractPage
1: [WithEditableTitle, WithEditableName]
2: public abstract class AbstractPage : ContentItem, INode
3: {
4: public string PreviewUrl
5: {
6: get { return Url; }
7: }
8: }
この抽象クラスは、ページで表示されるすべてのコンテンツ項目を表します.WithEditableTitleプロパティでは、このようなTitleプロパティを編集できます.WithEditableNameでは、このようなNameプロパティを編集できます.定義した読み取り専用プロパティPreviewUrlは、Url値を直接返しますが、何の役にも立たないようです.
2. ContentPage
1: [Definition("Content Page", Installer = N2.Installation.InstallerHint.PreferredStartPage)]
2: public class ContentPage : AbstractPage
3: {
4: [EditableFreeTextArea("Text", 100)]
5: public virtual string Text
6: {
7: get { return (string)(GetDetail("Text") ?? string.Empty); }
8: set { SetDetail("Text", value, string.Empty); }
9: }
10: }
このクラスは,文字コンテンツのあるコンテンツ項目,すなわちコンテンツを持つことを表し,これは仮想的なText属性によって取得・設定される.Definitionプロパティは、ContentPageに特別な設定を指定するために使用されます.最初のパラメータはそのタイトル(N 2管理インタフェースに表示され、ページを新規作成および編集するときに表示されます)、2番目のパラメータは、N 2がこのWebサイトをインストールするときにContentPageを開始ページとして選択できるようにするプロパティInstallerを設定します(インストールの2番目のステップで表示されます).この特性ではなく、より正確なPageDefinitionで代用したほうがいいです.ContentPageクラスで定義されたTextプロパティのEditableFreeTextAreaプロパティは、TextプロパティがN 2でリッチテキストエディタで編集できることを示しています.getメソッドとsetメソッドは、実際にはより省略できます.
3. NewsPage
1: [Definition("News")]
2: [RestrictParents(typeof(NewsContainer))]
3: public class NewsPage : AbstractPage
4: {
5: public NewsPage()
6: {
7: Visible = false;
8: }
9:
10: [EditableFreeTextArea("Text", 100)]
11: public virtual string Text
12: {
13: get { return (string)(GetDetail("Text") ?? string.Empty); }
14: set { SetDetail("Text", value, string.Empty); }
15: }
16:
17: public virtual IEnumerable GetComments()
18: {
19: foreach (ContentItem item in GetChildren())
20: {
21: if (item is CommentItem)
22: {
23: yield return item as CommentItem;
24: }
25: }
26: }
27: }
NewsPageはニュースの内容を表し、RestrictParentsによって親ノードがNewsContainerクラスであることを制限します.そのコンストラクション関数ではVisibleプロパティをfalseに設定し、ドキュメントを表示すると、ニュースページがサイトマップに表示されないことがわかります.もちろん、ナビゲーションに表示されないこともできます.また、ニュースにはコメントがあるので、GetCommentsメソッドはすべてのコメントを返します.これは、NewsPageがコメントの親ノードであることを示しています.
4. NewsContainer
1: [Definition("News Collection")]
2: public class NewsContainer : AbstractPage
3: {
4: public virtual IEnumerable GetNews()
5: {
6: return GetChildren(new AccessFilter(), new TypeFilter(typeof (NewsPage))).Cast();
7: }
8: }
ニュースコンテナクラスは、GetNewsメソッドによって実現されるすべてのニュースをリストする役割を果たします.
5. CommentItem
1: [Definition("Comment")]
2: [RestrictParents(typeof(NewsPage))]
3: public class CommentItem : AbstractPage
4: {
5: public override bool IsPage
6: {
7: get { return false; }
8: }
9:
10: public override string IconUrl
11: {
12: get { return "~/Content/comment.png"; }
13: }
14:
15: [EditableFreeTextArea("Text", 100)]
16: public virtual string Text
17: {
18: get { return (string)(GetDetail("Text") ?? string.Empty); }
19: set { SetDetail("Text", value, string.Empty); }
20: }
21: }
ニュースのコメントを表示するので、RestrictParentsプロパティが制約されています.また興味深いことに、個別のページに表示すべきではないので、IsPageプロパティを書き換え、常にfalseに戻るようにしました.他の属性は説明する必要はありません.
6. TextPart
1: [PartDefinition("TextPart")]
2: public class TextPart : ContentItem
3: {
4: [EditableFreeTextArea("Text", 100)]
5: public virtual string Text
6: {
7: get { return (string)(GetDetail("Text") ?? string.Empty); }
8: set { SetDetail("Text", value, string.Empty); }
9: }
10: }
このクラスは抽象的なAbstractPageから派生するのではなく、ContentItemクラスから直接派生し、WebFormのユーザーコントロールと同様にページテンプレート(ASPX)ではなくASCXテンプレートで表示されるPartDefinitionプロパティを使用して修飾されています.これにより、異なるページで再利用できます.具体的な使用はまだ検討されていない.