Я работаю с методом, который вызывает побочные эффекты на переданный опорный параметр. Одной из моих основных проблем в отношении кода является удобочитаемость, и я считаю, что это потенциальная причина для путаницы.
Взять например:
class Program
{
static void Main(string[] args)
{
var simplePOCO = new SimplePOCO();
// Method 1: causes side effects, but potentially unclear
Method1(simplePOCO);
// Method 2: assignment makes intentions clearer, but unnecessary
simplePOCO = Method2(simplePOCO);
// Method 3: ref/out makes intentions clearer, but (very?) unnecessary
Method3(ref simplePOCO);
// Method 4: avoid the problem altogether
simplePOCO.SimpleProperty = Method4();
}
public static void Method1(SimplePOCO simplePOCO)
{
simplePOCO.SimpleProperty = 1;
}
public static SimplePOCO Method2(SimplePOCO simplePOCO)
{
simplePOCO.SimpleProperty = 1;
return simplePOCO;
}
public static SimplePOCO Method3(ref SimplePOCO simplePOCO)
{
simplePOCO.SimpleProperty = 1;
return simplePOCO;
}
public static int Method4()
{
return 3;
}
}
class SimplePOCO
{
public int SimpleProperty { get; set; }
}
Я склоняюсь к использованию метода 2, но я понимаю, что это просто использование самопредставления. Метод 4 также выглядит хорошо, но в этом случае потребуется небольшой рефакторинг, чтобы туда попасть - стоит ли это того? Мне любопытно, есть ли у кого-то какие-то сильные чувства по этому поводу. Очевидно, что правильное именование метода будет иметь большое значение. Есть или какая-то школа мысли, которая решает эту проблему? Есть ли другие стили, о которых я не думал?