Как сделать так, чтобы коллекция моего объекта была размером? - PullRequest
0 голосов
/ 26 августа 2009

Я собираюсь сохранить список идентификаторов курсов, разделенных запятыми, доступных для продукта, их может быть любое количество, а во многих случаях только ОДИН. Я использую MVC, и я хочу быть в состоянии извлечь список в коллекцию некоторого вида, прежде чем он будет в модели. По сути, я не хочу анализировать список в массиве внутри представления или контроллера ... Как / где это лучший способ сделать это, вот мой объект продукта, который используется моим хранилищем. Что бы я использовал для типа коллекции courseIDs и где я мог бы преобразовать ее из списка в базе данных, разделенного запятыми, в массив или что-то еще?

namespace DomainModel.Entities
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
        public ??? CourseIDs { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DomainModel.Entities;

namespace DomainModel.Abstract
{
    public interface IProductsRepository
    {
        IQueryable<Product> Products { get; }
    }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2009

Если он предоставляет вам всю необходимую функциональность, IEnumerable<string> может быть наиболее подходящим способом для сохранения набора идентификаторов курса. Это наименее ограниченный интерфейс «коллекции». Если вам нужны другие функции, предоставляемые IList (Add, Remove, Count и т. Д.), Тогда вариант IList<string> также возможен.

Оставьте любой синтаксический анализ запятой отдельной строки в вашем слое доступа к данным (то же место, что вы читали из базы данных). Нет смысла передавать такие детали в вашу модель.

0 голосов
/ 26 августа 2009

Как насчет System.Collections.Generic.List<string> или IList<string>? Вы можете выполнить разбиение в вашем DAO (если вы используете этот шаблон) или вы можете сохранить строку в вашем классе Product при ленивой загрузке разделенного списка:

public class Product {
  private string _courseIdsString;
  private IList<string> _courseIds;
  public IList<string> CourseIds {
    get {
      if(_courseIds == null)
        _courseIds = new List<string>(_courseIds.Split(',' StringSplitOptions.RemoveEmptyEntries));
      return _courseIds;
   }
   // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...