Пока я просматривал Исходный код Nop Commerce , они создали Фабрики , которые преобразуют Domain model in to View models
.
Но я вижу, что некоторые методы возвращают фабрики IList
, некоторые возвращают IEnumerable
Так что я немного запутался, почему это несоответствие и почему бы не вернуть IEnumerable.
В более старых версиях Nop Commerce я видел, что они всегда используют для возврата IEnumerable<Model>
, но теперь в последних версиях большинство моделей представлений возвращаются в IList. Я знаю, с IList лучше работать вместо этого с абстракцией конкретного типа (List), но тогда IEnumerable намного лучше, потому что из него все вытекает .
Теперь это заставляет меня задуматься о том, какую структуру данных следует учитывать при возврате модели из метода?
Всегда ли это должно быть IEnumerable, потому что все происходит из этого интерфейса и, что наиболее важно, всегда работает с абстракцией?
Код:
public partial interface ICountryModelFactory
{
IList<StateProvinceModel> GetStatesByCountryId(string countryId, bool addSelectStateItem);
}
public partial interface IBlogModelFactory
{
List<BlogPostYearModel> PrepareBlogPostYearModel(); // Now why Concrete List here?
}
public partial interface IProductModelFactory
{
IEnumerable<ProductOverviewModel> PrepareProductOverviewModels(IEnumerable<Product> products,
bool preparePriceModel = true, bool preparePictureModel = true,
int? productThumbPictureSize = null, bool prepareSpecificationAttributes = false,
bool forceRedirectionAfterAddingToCart = false);
IList<ProductSpecificationModel> PrepareProductSpecificationModel(Product product);
}
Я немного запутался в этом вопросе о том, каковы наилучшие практики при преобразовании модели предметной области в модель представления и какую структуру данных лучше всего использовать при возврате модели представления?
Всегда ли лучше возвращать IEnumerable<MyModel>
методом, подобным приведенному ниже:
public IEnumerable<MyModel> ReturnMyModel(Product product){ }
Примечание: Это не вопрос, задающий разницу между IEnumerable и IList
Версия Nop Commerce = 4.20