Я бы выбрал вариант C , чтобы оставить логику внутри самого объекта:
public class DataObject
{
private int Value1;
private int Value2;
private int Value3;
private int Value4;
private int Value5;
public DataObject(){}
public int MultiplyFirstThreeValues()
{
return Value1*Value2*Value3;
}
}
Edit:
В ответ на комментарий - добавлю цитату:
Процедурный код получает информацию тогда
принимает решения. Объектно-ориентированный код
говорит объектам что-то делать.
Это просто лучший подход к проектированию, поскольку он позволяет скрыть способ, которым вы на самом деле получаете свои результаты / выполняете свою реализацию. То, как вы сейчас его настроили, больше отражает шаблон Visitor , который может быть мощным, но также добавляет сложности, поскольку интерфейс вашего класса теперь имеет всех этих открытых членов. Если ваш расчет будет охватывать несколько DataObject
и / или других типов, это на самом деле может иметь смысл, но я бы определенно использовал инкапсуляцию, если мне это удастся.