ivlevAstef / DITranquillity

Dependency injection for iOS (Swift)
MIT License
421 stars 32 forks source link

Question for developers. Вопрос к тем кто пользуется #124

Closed ivlevAstef closed 6 years ago

ivlevAstef commented 6 years ago

В 3 версии появилась валидация. Насколько она помогает, и может стоит ее ослабить?

В чем проблема: есть 2 модификатора - tag, many и еще один костыль в виде имени. Теги не удобны так как не дают пользоваться enum. C many все хорошо. Имена закостылены, и ими пользоваться сложно.

Но если закрыть глаза при валидации на совпадение Тегов и Имен, оставив проверку только по типу, то можно будет сделать общий удобный механизм. При этом в теории при интеграции с компилятором, вся валидация перейдет на стадию компиляции и будет полной.

Синтаксис (становится для всех 3 случаев одинаковый):

enum CarBrand {
  case bmw
  case audi
  ...
}

register { Car(engine: tag(.bmw, $0), body: name("BUG", $1), wheels: many(name("Michelin", $2))) }

Пожалуйста, те кто увидит, ответьте на вопрос - мне очень важно ваше мнение, чтобы понимать куда лучше двигать развитие библиотеки.

P.S. также можете предлагать другие идеи

patskovn commented 6 years ago

enum можно заменить на enum CarBrand { struct bmw {} struct audi {} } В принципе, так code completion тоже работает. Но есть минус что тэги - классы нельзя объявить как var tag: DITag = CarBrand.bmw.self, это просто не работает, а с enum-ом так можно. С другой стороны, если мы потеряем валидацию, то будет очень грустно. Я за то, чтобы её оставить (по крайней мере пока нет compile-time альтернативы)