Я бы пошел по пути наследования.
Первым шагом будет создание ваших SpecialProduct
предков Product
с некоторым способом связать их с записями вашей базы данных. Возможности включают таблицу сопоставления в базе данных или класс может определять свое собственное сопоставление.
Тогда ваш уровень доступа к данным будет иметь фабрику, которая будет возвращать набор Products
, созданный в соответствии с определенным вами отображением.
Остальная часть вашего приложения работает с этими Products
, фактически не заботясь о том, являются ли они «особенными» или нет.
Как то так ...
class Product {}
[MapTo("<GUID>"] //your attribute...
class SpecialA : Product { }
class ProductFactory
{
private Dictionary<Guid, Type> _productMap = ...;
public ProductFactory()
{
//Initialize map to types that are Products AND have a MapTo attribute
}
public Product[] GetBy(...criteria...)
{
// dynamically instantiate Products
// if the Guid exists in map, use that type
// otherwise, use Product
}
}