Uso una migaja de los atributos de entidad. Por ejemplo:
// interface for "ID" attribute of Company entity
public interface ICompany_ID {
Guid CompanyID{get;set;}
}
// interface for "Name" attribute of Company entity
public interace ICompany_Name {
string Name{get;set;}
}
// interface for "Logo" attribute of Company entity
public interface ICompany_Logo {
byte[] Logo{get;set;}
}
// interface for all attributes of Company entity
public interface ICompany : ICompany_ID, ICompany_Name, ICompany_Logo { }
// base class for classes based on Company entity
public abstract class CompanyBase : ICompany_ID {
// implementation of ICompany_ID interface
}
// class for all attributes of Company entity
public class Company : ICompany {
// implementation of ICompany interface (all attributes)
}
// class for Company name lookup
public class CompanyNameLookup : CompanyBase, ICompany_Name {
// implementation of ICompany_Name interfade
}
Este crumble me permite trabajar con diferentes atributos de diferentes entidades y todo es seguro. sin embargo, su capa de datos debe admitir este escenario.
La siguiente forma es la creación dinámica de clases de búsqueda, pero es mucho más compleja. Por otro lado, es mucho más flexible.
EDIT: entonces la selección puede ser por ejemplo:
var companies = (from c in db.Table<ICompany>()
order by c.Name
select new CompanyNameLookup { ID = c.ID, Name = c.Name }
).ToList();
o para tipos danymicly creados:
var companies = (from c in db.Table<ICompany>()
order by c.Name
select DynamicTypeFactory.New<ICompany_ID>(c.Id).And<ICompany_Name>(c.Name).Create()
).ToList();
El DynamicTypeFactory
es la clase con método estático New
y la interfaz de fluido para danymic clases de creación en tiempo de ejecución.
Estaba pensando en algo aún más "loco", como tener el resultado de búsqueda como solo un elemento en la pantalla. También podría querer una lista de recordatorios diarios en una grilla y un resumen del clima actual. ¿Agregaría mi CompanySearchResult, WeatherSummary y ReminderList en una clase MyComplexFormViewModel específicamente para ese formulario o página web? – Michael
@Michael - En ese escenario, probablemente haría una vista de contenedor que contenía un CompanySearchResult, WeatherSummary y ReminderList – Kirschstein
@Kirschstein - ¿es una "vista de contenedor" igual o diferente a la que propuse con la idea MyComplexFormViewModel? – Michael