дизайн с использованием класса только для чтения в C # - PullRequest
3 голосов
/ 08 апреля 2010

Небольшой вопрос дизайна здесь. Я пытаюсь разработать приложение для расчета в C #. У меня есть класс, назовем его InputRecord, который содержит сотни полей (многомерных массивов). Этот InputRecordclass будет использоваться в ряде CalculationEngines. Каждый CalculcationEngine может вносить изменения в несколько полей в InputRecord. Эти изменения являются шагами, необходимыми для его расчета.

Теперь я не хочу, чтобы локальные изменения, внесенные в InputRecord, использовались в других классах CalculcationEngine.

Первое решение, которое приходит на ум, - это использование структуры: это типы значений. Однако я бы хотел использовать наследование: каждому CalculationEngine нужно несколько полей, относящихся только к этому движку: у него есть свой собственный InputRecord, основанный на BaseInputRecord.

Может кто-нибудь указать мне на дизайн, который поможет мне достичь этого?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2010

Если у вас действительно много данных, использование структур или распространенных методов клонирования может оказаться неэффективным при использовании пространства (например, при этом потребуется много памяти).

Похоже на дизайн, в котором вам необходимо иметь«главное хранилище» и «отличное хранилище», просто аналогичные СУБД, в которой есть файлы данных и транзакции.

В основном вам необходимо вести список изменений, выполненных для каждого механизма вычислений, и использовать основные значениядля предметов, на которые не влияют никакие изменения.

2 голосов
/ 08 апреля 2010

Элегантным решением было бы , а не изменить запись ввода. Это позволило бы совместное использование (и параллельная обработка).

Если это не вариант, вам придется клонировать данные. Дайте каждому производному классу конструктор, который принимает базовый Input в качестве параметра.

1 голос
/ 08 апреля 2010

Вы можете объявить метод Clone () в BaseInputRecord, а затем передать копию каждому CalculationEngine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...