【发布时间】:2012-02-10 16:48:22
【问题描述】:
我感觉我对界面的使用不正确。我知道接口是具体类必须遵守的契约。
所以我将解释我要解决的问题,也许有人可以指出我正确的方向。
我正在构建一个为任何请求返回页面的应用程序,我有三种页面类型,Cms、产品和类别。
这三个都必须实现以下接口:
public interface IPage
{
PageType PageType { get; set; }
PageContent Content { get; set; }
Meta Meta { get; set; }
}
无论页面类型如何,都需要这些属性。
一个页面可能有额外的属性取决于它们的类型,例如一个类别页面可能是这样的:
public class CategoryPage : IPage
{
public PageType PageType { get; set; }
public PageContent Content { get; set; }
public Meta Meta { get; set; }
public List<Product> Products { get; set; }
}
目前我有一个页面服务,它将为请求的 url 返回一个页面。
根据 PageType 它知道要返回什么类型的页面。
问题在于 pageService 返回一个 IPage 以便它可以返回任何页面类型。
这是一个问题,因为并非我所有的具体都只实现了接口,在类别页面的情况下,它还有一个列表,正如您所期望的,除非我转换为具体类型,否则我无法访问。
但是有没有一种方法可以返回一个通用页面类型并让接收者知道它是什么具体的?
我确信我现在的做法并不是最好的方法,我希望得到一些关于如何解决这个小问题的指导和建议。
谢谢
更新
我已经确定了演员阵容。
我确信必须有更好的方法来处理多个类使用一些基本属性但也实现它们自己的情况。当您从服务中获取这些类之一时,您需要知道您得到了什么,以便您可以使用相关属性..
或者也许我在这里尝试做的只是完全错误的,我需要采取另一种方法。我想我会继续我现在所拥有的,但要继续思考它。
更新 2
我已经改变了执行此操作的方式,因此我不需要强制转换,我有一个 PageType 枚举,用于识别正在使用的页面类型。
这与继承所需所有内容的 Ipage 相结合似乎是一个很好的解决方案,并且无需演员表。
【问题讨论】:
标签: c# asp.net interface concreteclass