Что ж, мне пришлось переписать это, так как за пять голосов за меня проголосовали за то, что я дал слишком много деталей ... Пойди!
class BaseModel
{
public T[] Get<T>()
{
// return array of T's
}
public T Find<T>(object param)
{
// return T based on param
}
public T New<T>()
{
// return a new instance of T
}
}
class BaseRow
{
private BaseModel _model;
public BaseRow(SqlDataReader rdr, BaseModel model)
{
// populate properties of inheriting type using rdr column values
}
public void Save()
{
// calls _model.Save(this);
}
}
В настоящее время у меня есть несколько классов, которые наследуюткласс BaseModel.Каждый из методов, предоставляемых BaseModel, будет возвращать экземпляр или массив экземпляров типа, который наследует класс BaseRow.
В данный момент при вызове открытых методов в BaseModel через наследующий класс, т.е.
using(DeviceModel model = new DeviceModel())
{
DeviceRow row = model.Find<DeviceRow>(1);
DeviceRow[] rows = model.Get<DeviceRow>();
DeviceRow newRow = model.New<DeviceRow>();
}
Мне нужно указать тип (класс, который наследует класс BaseRow), поскольку методы в BaseModel / BaseRow не знают / не заботятся о том, какой они тип, кроме того, что они наследуют от BaseRow.
Я хотел бы найти способ избавиться от необходимости указывать без необходимости реплицировать код в каждом классе, который наследует BaseModel , то есть
class DeviceModel : BaseModel
{
public DeviceRow Find(object param)
{
return this.Find<DeviceRow>(param);
}
}
Примечание. К сожалению, я не могу внедрить или использовать какие-либо сторонние решения.Тем не менее, я пытался использовать Castle Active Record / nHibernate и, честно говоря, они очень большие и тяжелые для того, что должно быть очень простой системой.
Надеюсь, я не предоставил «слишком много» деталей.Если у меня есть, пожалуйста, дайте мне знать.
Спасибо