Функция перехода на класс: лучшие практики конструктора - PullRequest
0 голосов
/ 09 января 2020

Я работаю над перемещением некоторых сложных сценариев из функций в классы. В функциональной версии я бы использовал такую ​​строку

"{header-[cf][0][:12]}_Started: 11:30:21"

{????} _ - это идентифицирующая информация, здесь у меня есть элемент заголовка header- (что имеет значение для форматирования), он будет регистрировать как консоль, так и файл [cf] , не иметь начального отступа [0] , и дополнит следующую строку, чтобы обеспечить 12 символы перед: следующим за Начато [: 12] , поэтому 5 пробелов. У меня были функции для увеличения значения вкладки, изменения места назначения (консоль, файл или оба) и т. Д. c. Все они управляются сложными регулярными выражениями для извлечения идентифицирующей информации из начала строки. Теперь, когда я перехожу в классы, у меня есть

Enum PxLogType {
    blankLine
    header
    milieuCondition
}

class Px_LogItem {
    [PxLogType]$type
    [bool]$logToConsole
    [bool]$logToFile
    [int]$indent
    [char]$alignToSymbol
    [int]$alignSymbolLocation
    [string]$string

    # Constructor
    Px_LogItem ([PxLogType]$type, [bool]$logToConsole, [bool]$logToFile, [int]$indent, [string]$string) {
        $this.type = $type
        $this.logToConsole = $logToConsole
        $this.logToFile = $logToFile
        $this.indent = $indent
        $this.string = $string
    }
    Px_LogItem ([PxLogType]$type, [bool]$logToConsole, [bool]$logToFile, [int]$indent, [char]$alignToSymbol, [int]$alignSymbolLocation, [string]$string) {
        $this.type = $type
        $this.logToConsole = $logToConsole
        $this.logToFile = $logToFile
        $this.indent = $indent
        $this.alignToSymbol = $alignToSymbol
        $this.alignSymbolLocation = $alignSymbolLocation
        $this.string = $string
    }
}

В конечном итоге у меня будет больше перечислений, метод для увеличения отступа табуляции и т. Д. c. Это работает, но

$logItem = [Px_LogItem]::New([PxLogType]::header, $true, $true, 0, ':', 12, "Started: 11:30:21")

не так читается на мой взгляд. Особенно два экземпляра $true, которые заменяют [cf] для определения цели для журнала. И в зависимости от того, где я go, я вижу несколько вариантов конструктора, которые начинают становиться грязными. По крайней мере, в моих глазах грязно, которые еще не настолько знакомы с тем, как конструкторы настолько ... конкретны c.

Итак, мне интересно, нахожусь ли я на правильном пути, и просто не знаком хватит пока с тем, как выглядит код на основе классов, или я не в курсе? Я полагаю, что мог бы сделать другое перечисление для цели журнала, с допустимыми значениями c, f & cf. Или даже есть версия, которая не принимает эти аргументы, и по умолчанию оба имеют значение true, чтобы упростить вещи. Это потребует цепочки методов для конструкторов, что может быть хорошей идеей, но сколько конструкторов считается порогом для этого изменения? Я понимаю, что все это довольно неопределенно c и в основном просто мнение, но я надеюсь, что достаточно c, чтобы некоторые люди могли оценить их мнение, поскольку я слишком невежествен, чтобы иметь действительное мнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...