Я не уверен, можно ли добиться такой реализации в Dot Net. Ниже представлена информация
В настоящее время мы работаем над приложением, которое выполнено в технологиях COM+, ASP, XSL, XML. Это приложение с многоуровневой архитектурой, в котором COM+ действует как BAL. Шаги выполнения для любой операции CRUD будут определяться с использованием отдельного пользовательского интерфейса, который использует XML для хранения информации. BAL читает XML и понимает этапы выполнения, которые определены, и выполняет соответствующие методы в DLL. Как и в случае с EDM, у нас есть собственная модель (с использованием XML), которая определяет, какое свойство объекта является доступным для поиска, извлекаемым и т. д. На основе этой информации BAL создает запросы и вызывает процедуры для получения данных.
В текущем приложении и BAL, и DAL легко настраиваются без внесения каких-либо изменений в код. результаты будут переданы на уровень представления в формате XML, который строит пользовательский интерфейс на основе полученных данных.
Теперь я создаю проект миграции, который касается информации о сотрудниках. Он также будет следовать архитектуре уровня N, в которой уровень представления взаимодействует с BAL, который подключается к DAL для возврата данных.
Вот в чем проблема: в нашей существующей версии мы обрабатываем каждую информацию как XML в ее исходной форме (без преобразования объекта и т. д.), но в проекте миграции команда действительно заинтересована в использовании модели разработки ООП, где вся информация, которая отправленные из BAL, должны быть преобразованы в объекты соответствующих типов (например, employeeCollection, Address Collection и т. д.).
Если у нас есть статическое количество данных, возвращаемых из BAL, у нас может быть класс, который содержит эти узлы в качестве свойств, и мы можем получить к ним доступ. Но в нашем случае данные, возвращаемые из нашего BAL, необходимо настроить. Как мы можем справиться с настройкой на уровне представления, которая преобразует результат в объект.
Ниже приведен пример возвращаемого XML
<employees>
<employee>
<firstName>Employee 1 First Name</firstName>
<lastName>Employee 1 Last Name</lastName>
<addresses>
<address>
<addressType>1</addressType>
<StreetName>Street name1</StreetName>
<RegionName>Region name</RegionName>
<address>
<address>
<addressType>2</addressType>
<StreetName>Street name2</StreetName>
<RegionName>Region name</RegionName>
<address>
<address>
<addressType>3</addressType>
<StreetName>Street name3</StreetName>
<RegionName>Region name</RegionName>
<address>
<addresses>
</employee>
<employee>
<firstName>Employee 2 First Name</firstName>
<lastName>Employee 2 Last Name</lastName>
<addresses>
<address>
<addressType>1</addressType>
<StreetName>Street name1</StreetName>
<RegionName>Region name</RegionName>
<address>
<address>
<addressType>2</addressType>
<StreetName>Street name2</StreetName>
<RegionName>Region name</RegionName>
<address>
<addresses>
</employee>
</employees>
Если это единственные столбцы, я могу написать класс, похожий на
public class Address{
public int AddressType {get;set;};
public string StreetName {get;set;};
public string RegionName {get;set;};
}
public class Employee{
public string FirstName {get; set;}
public string LastName {get; set;}
public string AddressCollection {get; set;}
}
public class EmployeeCollection : List<Employee>{
public bool Add (Employee Data){
....
}
}
public class AddressCollection : List<Address>{
public bool Add (Address Data){
....
}
}
Этот класс будет предоставляться клиентам и консультантам в виде DLL. Мы не будем предоставлять исходный код для того же.
Теперь, когда консультанты или клиенты выполняют настройку (например, добавление страны к адресу и добавление объекта паспортной информации с объектом сотрудника), они должны иметь доступ к этим свойствам в этих классах, но без исходного кода они не смогут выполнять эти модификации. делает приложение бесполезным. Есть ли способ сделать это в DotNet.
Я думал об использовании анонимных классов, но проблема с анонимными классами заключается в следующем.
у нас не может быть методов в нем. Я не уверен, как я могу разместить объекты коллекции (которые, в свою очередь, будут анонимным классом). Не уверен в привязке datagrid/user control и т.д.
Я также думал об использовании CODEDom для создания среды выполнения классов, но не уверен в памяти, проблемах с производительностью. также классы должны быть созданы только один раз и должны использоваться до тех пор, пока не произойдет другое изменение.
Пожалуйста, помогите мне в этой проблеме. Любая справочная информация/зашифрованный код/ссылки будут полезны.
Обновлять:
Спасибо за предоставленные ответы, которые дали мне возможность заглянуть в разные области, о которых я не думал.
Есть одна часть информации, которую я пропустил в вопросе. Код пользовательского интерфейса также будет представлять собой библиотеки DLL, а не исходный код. Клиенты могут свободно создавать новый код и присоединяться к пользовательскому интерфейсу, но они не могут изменить существующий пользовательский интерфейс с помощью кода. У нас есть дизайнер, который будет отображать выбираемые отображаемые свойства, из которых клиент может выбрать для отображения данных пользователю. Таким образом, они могут изменить внешний вид пользовательского интерфейса. Также они могут изменить свойство привязки, используя эту модель.
Если бы я дал эту часть в вопросе, я мог бы получить больше ответов и мог бы дать вам четкое представление о том, что именно происходит.
С приведенной выше частью ниже моя новая мысль
Я также думаю об использовании модели CodeDom для создания классов отдельно и переноса их в пользовательский интерфейс. Ниже моя мысль
Создайте консольное приложение, которое читает XML-файл нашей структуры. он будет содержать свойства и классы, доступные в системе. ТАКЖЕ создайте пользовательский интерфейс для управления файлом XML для создания классов. в консоли Используйте COdeDom для создания классов и методов. Скомпилируйте их с помощью библиотек или команд оболочки. Переместите созданные классы в пользовательский интерфейс. Теперь пользовательский интерфейс распознает новые классы и может отображать свойства.
Это может не привести к перегрузке памяти и высокому использованию/утечкам памяти. также мы заменяем библиотеки DLL, что просто. Единственная проблема - генерация класса. он должен быть усложнен таким образом, чтобы команда могла выполнять любую операцию в этом пользовательском интерфейсе. Что вы думаете, ребята