Это было бы действительно легко, если бы у вас была модель предметной области или даже модель представления. Вы можете использовать инструмент, такой как AutoMapper , чтобы справиться с большей частью тяжелой работы. Все, что вам нужно сделать, это создать класс, похожий на модель сущности:
public class MyViewObject
{
public MyViewObject(string fieldA, string fieldB, string fieldC)
{
this.FieldA = fieldA;
this.FieldB = fieldB;
this.FieldC = fieldC;
}
public string FieldA { get; set; }
public string FieldB { get; set; }
public string FieldC { get; set; }
}
И затем сопоставьте его (я показываю здесь ручное отображение, но, как я уже сказал, вы можете автоматизировать многое из этого с помощью инструмента для автоматического сопоставления):
public IEnumerable<MyViewObject> GetViewObjects(string arg)
{
var dataObjects = GetMyObjects(arg);
return dataObjects.Select(o => TransformMyObject(o, "bar"));
}
public MyViewObject TransformMyObject(MyObject o, string fooReplacement)
{
return new MyViewObject(o.FieldA, o.FieldB,
o.FieldC.Replace("foo", fooReplacement);
}
Это действительно не так много работы, и это сделает намного проще для поддержки будущих изменений в логике представления. Также нормально иметь некоторую эту логику в представлении, если это действительно простое форматирование, но я предпочитаю сохранять представления настолько тупыми, насколько это возможно, так как модели представления содержат в основном (или полностью) строковые свойства.
Может показаться, что вы «прыгаете через обручи» сейчас, но как только у вас будет отдельный домен и / или модель представления, вы будете удивляться, как вы обходились без него. Когда в вашем приложении отсутствует целый слой, вы начинаете сталкиваться с этими странными проблемами с утечкой абстракции.