c # DAL - интерфейс для бизнес-объектов - PullRequest
0 голосов
/ 17 января 2011

У меня есть интерфейс отчетов с методом Run.

Существуют различные типы отчетов, которые реализуют этот интерфейс, и каждый из них запускает свой собственный тип отчетов, получая данные из разных таблиц.

Каждый отчет, используя свой собственный контекст данных, получает данные, которые затем заполняют бизнес-объекты, и в настоящий момент они возвращаются в виде массива (я хотел бы иметь возможность по крайней мере вернуть что-то вроде списка, но потому что вам нужно определитьтип списка делает его немного сложнее).

Затем используется отражение для выяснения свойств возвращаемых данных.

Надеюсь, я объяснил это достаточно хорошо!

Есть ли лучший способ сделать это?

По запросу:

public interface IReport
{
    int CustomerID { get; set; }

    Array Run();
}

public class BasicReport : IReport
{
    public int CustomerID { get; set; }

    public virtual Array Run()
    {
        Array result = null;
        using (BasicReportsDataContext brdc = new BasicReportsDataContext())
        {
            var queryResult = from j in brdc.Jobs
                              where j.CustomerID == CustomerID
                              select new JobRecord
                              {
                                  JobNumber = j.JobNumber,
                                  CustomerName = c.CustomerName
                              };

            result = queryResult.ToArray();
        }
    }
}

Затем другой класс выполняет foreach над данными и использует отражение, чтобы узнать имена полей иоценивает и помещает это в XML-файл.

В его нынешнем виде все работает - я просто не могу не думать, что есть лучший способ сделать это - этот perhaps мое ограниченное понимание C # пока не позволяет мне видеть.

1 Ответ

0 голосов
/ 17 января 2011

Лично я бы сначала спросил себя, нужен ли мне Действительно интерфейс. Это было бы в случае, если классы, реализующие его, Действительно отличаются по своей природе (не только по типу отчета). Если нет, то есть все реализующие классы в основном являются «репортерами», то да, есть более удобный способ сделать это:

  • Написание родительского реферата Отчет
  • Наличие виртуального метода Run и метода доступа CustomerID
  • наследуя ваши классы «Reporter» от него
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...