Skip to content

Implementation #1

@Suntrie

Description

@Suntrie
  1. Какими недостатками обладает объявление переменных публичными (класс Parser)? Почему в большинстве ситуаций используются
    сеттеры + приватные поля? Какой выигрыш Вы здесь получили (если получили), отказавшись от такого стандартного подхода?
  2. Неочевидно, почему для указания output file выбрано имено Option - такой выбор требует "ручного" контроля того, что в списке аргументов действительно указан
    выходной файл. Кажется, заметно проще воспользоваться Argument (required = false)
  3. Parser. public void buildOutput(HashMap<String, List> results) throws IOException { - для объявления сигнатур методов (особенно, публичных) используют
    максимально общие возможные типы данных (стараются гарантировать как можно меньше "специфики": наличия конкретных методов, конкретных алгоритмических решений и т.д,
    сводя всё к минимальному "контракту на поставку услуг") - т.е., в данном случае вместо класса HashMap лучше требовать просто Map на вход. Аналогично для
    public OutputBuilder(boolean fileOutput, File outputFile, HashMap<String, List> results) { и т.д. Поля также обычно стараются объявлять на уровне интерфейсов
  4. public List arguments = new ArrayList<>(); - для хранения информации обычно стоит использовать специализированный тип.
    Например, здесь это может быть сам File или path
  5. Парсинг аргументов и вызов основной функциональности приложения - точно две независимые задачи, класть их обе в parse - нечитаемо, лучше отдельно вызвать конструктор,
    отдельно метод для получения результатов, причем по названию метода должно быть очевидно, что именно он делает.
  6. BuildMap. buildMap. if (reverseOutput) { - возможно, я чего-то не увидела, но HashMap гарантирует по дефолту сортировку? Какие вообще реализации Map существуют? Чем они отличаются?
  7. LongOutput. getFileSizeBytes. file.getLength() определён для директорий? Если нет, то, кажется, код нужно немного поправить
    См. https://stackoverflow.com/questions/10710193/how-to-preserve-insertion-order-in-hashmap
  8. Permissions. Чем отличаются статические методы от методов объектов класса? Вам здесь действительно нужен именно тот вид методов, который сейчас используется?
  9. Permissions. getPermissionsRWX. Битовая маска всегда должна содержать 3 позиции - если какое-то из прав отсутствует, в позиции выводится "-".
    https://linuxcontainers.org/lxd/try-it/?id=93071cc9-bdad-42f8-9754-585e7184894f#introduction - вот здесь можно попробовать поиграться с оригинальной утилитой.
    Например, введя последовательно команды
    cat 1>t
    ls -l

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions