русский
Germany.ruForen → Архив Досок→ Programmierung

Резюме для программиста

05.11.21 09:29
Re: Резюме для программиста
 
alex445 старожил
in Antwort alex445 05.11.21 09:07, Zuletzt geändert 05.11.21 10:52 (alex445)

Например, читаю у человека (сама статья не важна, привожу лишь один пример оттуда)


public class Turns
{
    public int CurrentTurn { get; private set; }
    
    internal void NextTurn ()
    {
        CurrentTurn++;
    }
}

В чём смысл такой архитектуры перед банальным публичным сеттером свойства CurrentTurn? Как я обезопашу себя, что кто-то присвоит CurrentTurn не то значение? Я могу вызвать метод NextTurn много раз и присвоить CurrentTurn всякую белиберду - неправильное значение. Какое-то раздувание "архитектуры" ради архитектуры.


Другие говорят, что тут мол принцип ответственности - мол, добавлять единичку к ходу (CurrentTurn) может только класс Turns, поэтому у него есть специальный метод для этого, а просто так присваивать любые значения или уменьшать их нельзя. А увеличивать сколько угодно много раз можно? Если по логике метод NextTurn не может быть вызван несколько раз подряд без проверки условий, но данная архитектура мне его вызвать позволяет, то смысла в этом всём громадье кода почти нет. Т.е. если разработчик не знает, как правильно использовать класс Turns, то он и с такой архитектурой набедокурит. А если знает, то проще дать публичный доступ к сеттеру CurrentTurn.


По моему, если так охота трястись, чтобы CurrentTurn не изменялся как попало, то тут больше подойдёт банальный публичный сеттер и валидация внутри класса Turns для свойства CurrentTurn. В представленной архитектуре я не вижу никакой особой инкапсуляции и тем более какой-то особой защиты от дурака по произвольному изменению свойства CurrentTurn.


Чел просто набросал гору кода, которая ничего не гарантирует, зато внешне по методичкам написана. Я такого кода полно встречал в разных примерах в интернете. Люди городят всякие инкапсуляции ради инкапсуляций, закрывают всё подряд, потом делают кучу методов, которые тупо дают доступ вместо закрытых свойств. Якобы они ограничивают тип доступа - типа только инкремент на 1, или только умножение. Но то, что я и с этими ограничениями могу натворить дел - это игнорируется. В результате есть раздутый класс строк на 100, который, если просто сделать полностью публичные свойства, ужмётся до максимум 10 строк. Народ за деревьями леса не видит.

 

Sprung zu