我感觉我对界面的使用不正确。我知道接口是具体类必须遵守的合同。
因此,我将解释我要解决的问题,也许有人可以为我指明正确的方向。
我正在构建一个为任何请求返回页面的应用程序,我有三种页面类型,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 相结合似乎是一个足够好的解决方案,并且不需要演员表。