2017-02-23 110 views
0

Мой вопрос не «что делать со слишком большим количеством параметров», я нашел ответ в How to avoid "too many parameters" problem in API design?. то, что мне нужно, является дополнением информации об осуществлении.«Слишком много параметров» сохраняют частные переменные или заменяют их классом параметров

У меня был класс

internal class SomeClass 
{ 
    private string value1; 
    private DateTime value2; 
    private SomeEnum value3; 
    // and the same until valueALot 

    internal SomeClass(string val1, DateTime val2, SomeEnum val3, ...) 
    { } 
} 

И я заменил параметры конструктора с новым SomeParameters класса

internal class SomeParameters 
{ 
    internal string value1 { get; set; } 
    internal DateTime value2 { get; set; } 
    internal SomeEnum value3 { get; set; } 
} 

internal class SomeClass 
{ 
    internal SomeClass(SomeParameters parameters) 
    { } 
} 

Мой вопрос: В SomeClass классе я должен держать отдельные переменные и присваивать им SomeParameters или я должен заменить их экземпляром класса SomeParameters?

Решение 1:

internal class SomeClass 
{ 
    private string value1; 
    private DateTime value2; 
    private SomeEnum value3; 

    internal SomeClass(SomeParameters parameters) 
    { 
     value1 = parameters.value1; 
     value2 = parameters.value2; 
     value3 = parameters.value3; 
    } 
} 

Решение 2:

internal class SomeClass 
{ 
    private SomeParameters _parameters; 

    internal SomeClass(SomeParameters parameters) 
    { 
     _parameters = parameters; 
    } 
} 

Решение 2 кажется более легким и избежать избыточности, но я не знаю, если это хорошая практика. Может ли решение 2 решить проблемы безопасности?

Возможно, самое простое решение является хорошим, и я задаю себе слишком много вопросов.

Спасибо за ваши отзывы

+0

как вы представляете его, кажется, что 'SomeClass' * * является параметр обертка объект, который делает' SomeParameters' довольно лишними. – Abion47

+1

Если вы сохраняете значения в экземпляре 'SomeParameters', вы должны сделать копию этого экземпляра. В противном случае пользователь класса может впоследствии изменить значения в данном экземпляре ('SomeParameters' является ссылочным типом), и вам может не потребоваться изменить значения в вашем классе извне. –

+0

@ Abion47 Итак, я представляю это плохо, SomeClass много чего делаю и не является оберткой –

ответ

0

Your SomeParameters фактически является передача данных объекта:

Когда вы работаете с удаленным интерфейсом, такие как Remote Фасад (388), каждый вызов к нему дорого. В результате вам необходимо уменьшить количество звонков, а это значит, что вам необходимо передать больше данных с каждым вызовом. Один из способов сделать это - использовать множество параметров. Однако, это часто неловко программировать - действительно, часто невозможно с такими языками, как Java, которые возвращают только одно значение .

https://martinfowler.com/eaaCatalog/dataTransferObject.html

Я бы сказал, что нет ничего плохого с раствором 2, но я хотел бы знать больше о контексте вашего приложения и бизнес, связанный с вашей SomeClass.

Вортс Также чтение: https://msdn.microsoft.com/en-us/library/ff649585.aspx

Смежные вопросы