Skip to content

Implementation #1

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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