У меня есть три разных класса:
Task
Order
Transmission
У каждого класса есть свойства с разными типами.Также есть возможность прикрепить данные, которые представлены пользовательскими полями (реализуется массивом IField, где IField может быть текстовым полем или полем списка).Каждое настраиваемое поле имеет имя, представляющее имя присоединенного свойства данных.
Мне нужно преобразовать один класс в другой:
Task -> Order
Order -> Transmission
Transmission -> Task
Transmission -> Order
Order -> Task
Task -> Transmission
для того, что я создал:
- Статический класс статических ключей, где каждый ключ представляет имя свойства.
- "
DataObject
", который содержит словарь имени свойства и объекта в качестве значения. Каждый класс (Task, Order, Transmission) реализует интерфейс IDataShare:
public interface IDataShare
{
DataObject ToDataObject();
void FromDataObject(DataObject data);
}
Например, объекты задач со следующими свойствами:
WorkerId:5
CustomerId:7
VehicleId:null
StartDate:null
И со следующими настраиваемыми полями:
Subcontractor: {listId:5, Value:4} (this is list field)
delivery Note: "abc" (this is text field)
будет преобразовано в следующий словарь:
{"WorkerId", 5}
{"CustomerId", 7}
{"VehicleId", null}
{"StartDate", null}
{"Subcontractor", {listId:5, Value:4}}
{"delivery Note", "abc"}
строковые ключи "WorkerId", "CustomerId"," VehicleId "," StartDate "были взяты из статического класса, который содержит строковые константы, где" Subcontractor "и" deliveryNote "- это имена пользовательских полей, добавленных пользователем (я не знаю, какие поля пользователь может добавить, поэтому япросто используйте имя поля).Когда я заполняю объект с помощью DataObject, я должен убедиться, что имя свойства совпадает с именем ключа, а также убедиться, что значение верное (строка не может быть вставлена в long).Кроме того, настраиваемое поле списка (субподрядчик) не может иметь только itemId в качестве значения, потому что, когда мне нужно убедиться, что listId настраиваемого поля в объекте совпадает со listId настраиваемого поля в DataObject.
У меня много проблем со знанием типа значения.Я всегда должен использовать «X - Y», если операторы «X как Y».Кроме того, я должен помнить, как хранить тип значения при реализации интерфейса IDataShare, который усложняет работу.
Может кто-нибудь помочь мне подумать об ограничении, которое я могу добавить к процессу преобразования из объекта в DataObject?Кто-нибудь может помочь мне улучшить этот метод преобразования объектов?
Спасибо!
ОБНОВЛЕНИЕ
Я хочу объяснить точку.Моя самая большая проблема заключается в том, что есть несколько способов перевести каждое свойство / настраиваемое поле, поэтому мне нужно запомнить тип значения в DataObject.Например, в классе Transmission у меня есть свойство VehicleId.Я хочу преобразовать объект задачи с настраиваемым полем с именем «VehicleId» в Transmission.Все, что я хочу, это то, что значение пользовательского поля TaskId VehicleId будет преобразовано в свойство VehicleId Transmission.Но, поскольку это настраиваемое поле - как я писал ранее - есть способ сохранить настраиваемое поле, основанное на list: {listId:5, Value:4}
.Теперь в процессе преобразования (FromDataObject in Transmission) в случае, если DataObject имеет ключ «VehicleId», я должен проверить, является ли значение длинным (идентификатор транспортного средства в качестве свойства) или IListField (идентификатор транспортного средства в качестве настраиваемого поля списка).эти проверки типа действительно делают беспорядок.