Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 30.03.20 00:03
Оценка: 2 (1)
Добрый день,

подскажите аналог шаблонов dotnet new или boilr.
Задача — нужно периодически генерировать файлы и каталоги для очередного микросервиса или компонента проекта из его названия и ряда параметров.
Стандартная структура проекта допустим выглядит примерно так:

Product.Component.Core
Product.Component.Core.Repositories
Product.Component.Core.Services
Product.Component.Api.Contract
Product.Component.Api.Client
Product.Component.Api.Host
Product.Component.Queues.Contract
Product.Component.Queues.Client
Product.Component.Worker

Хочется на вход передать:
— название продукта и компонента, которое должно подставиться вместо “Product" и "Component" соответственно (т.е. применить замену в названиях файлов и их содержимом)
— опции, которые могут убирать некоторые части, например Api и Worker для данного компонента не нужны, поэтому этих каталогов не будет и в итоговом .sln файле тоже.

Хочется чтобы трансформации описывались в понятной форме.
И хорошо бы иметь возможность писать код с логикой выполнения трансформаций, но это я уже раскатал губу…

Сейчас используем custom шаблоны для “dotnet new”:
https://docs.microsoft.com/en-us/dotnet/core/tools/custom-templates
Он не нравится — язык описания подстановок не прост, а уж как приходится приседать если хочется в зависимости от переданных параметров применить трансформации…
boilr не выглядит живым и как я вижу дальше простых подстановок не пошел.

Может кто-то знает более гибкое и удобное решения? Может даже с UI?
Или может кто-то знает хорошие структуры проектов типа приведенного выше?
Может кто-то своим вариантом поделится?
Буду очень благодарен за любые идеи!
Re: Шаблонный проект (dotnet new custom)
От: Sharov Россия  
Дата: 30.03.20 09:30
Оценка: 2 (1)
Здравствуйте, Keith, Вы писали:

K>Может кто-то своим вариантом поделится?

K>Буду очень благодарен за любые идеи!

В качестве идеи -- на R#. У них есть какие-то генераторы шаблонов, но на счет параметров я не уверен.
Кодом людям нужно помогать!
Re: Шаблонный проект (dotnet new custom)
От: #John Европа https://github.com/ichensky
Дата: 31.03.20 11:22
Оценка: 2 (1)
Здравствуйте, Keith, Вы писали:



K>Может кто-то знает более гибкое и удобное решения? Может даже с UI?

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

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[2]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 11:24
Оценка:
J>Написать консольное приложение, которое и будет генерировать новый шаблон.

Да, уже тоже подумал что так проще всего будет, спасибо!
Re: Шаблонный проект (dotnet new custom)
От: _NN_ www.nemerleweb.com
Дата: 31.03.20 11:58
Оценка: 2 (1)
Здравствуйте, Keith, Вы писали:

K>Сейчас используем custom шаблоны для “dotnet new”:

K>https://docs.microsoft.com/en-us/dotnet/core/tools/custom-templates
K>Он не нравится — язык описания подстановок не прост, а уж как приходится приседать если хочется в зависимости от переданных параметров применить трансформации…

Для этого судя по всему есть Post Action и generator.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 12:02
Оценка:
_NN>Для этого судя по всему есть Post Action и generator.

Про возможность подключить скрипты не знал, спасибо.
Но все равно похоже проще свой консольный проект сделать, чем разбираться с dotnet templating.
Re[3]: Шаблонный проект (dotnet new custom)
От: _NN_ www.nemerleweb.com
Дата: 31.03.20 12:22
Оценка: 2 (1) +1
Здравствуйте, Keith, Вы писали:

_NN>>Для этого судя по всему есть Post Action и generator.


K>Про возможность подключить скрипты не знал, спасибо.

K>Но все равно похоже проще свой консольный проект сделать, чем разбираться с dotnet templating.

Зависит от целей.
У dotnet CLI можно подключать шаблоны через NuGet и даже скачивать автоматически.

Starting with .NET Core 3.0 SDK, the CLI searches for templates in NuGet.org when you invoke the dotnet new command in the following conditions:


If the CLI can’t find a template match when invoking dotnet new, not even partial.
If there’s a newer version of the template available. In this case, the project or artifact is created but the CLI warns you about an updated version of the template.

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 12:26
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Keith, Вы писали:


_NN>>>Для этого судя по всему есть Post Action и generator.


K>>Про возможность подключить скрипты не знал, спасибо.

K>>Но все равно похоже проще свой консольный проект сделать, чем разбираться с dotnet templating.

_NN>Зависит от целей.

_NN>У dotnet CLI можно подключать шаблоны через NuGet и даже скачивать автоматически.

_NN>[q]

_NN>Starting with .NET Core 3.0 SDK, the CLI searches for templates in NuGet.org when you invoke the dotnet new command in the following conditions:

_NN> If the CLI can’t find a template match when invoking dotnet new, not even partial.

_NN> If there’s a newer version of the template available. In this case, the project or artifact is created but the CLI warns you about an updated version of the template.

Прикольно, но если в большинстве случаев надо один и тот же шаблон и он внутренний для компании,
то не так уж сложно репозиторий один раз клонировать и запустить из него CLI.
Согласен, что свое решение пилить не хочется совсем, но мне кажется оно окупится если надо часто шаблон править.
Re[5]: Шаблонный проект (dotnet new custom)
От: _NN_ www.nemerleweb.com
Дата: 31.03.20 12:40
Оценка: 3 (1)
Здравствуйте, Keith, Вы писали:

K>Прикольно, но если в большинстве случаев надо один и тот же шаблон и он внутренний для компании,

K>то не так уж сложно репозиторий один раз клонировать и запустить из него CLI.
K>Согласен, что свое решение пилить не хочется совсем, но мне кажется оно окупится если надо часто шаблон править.

Своё точно писать не стоит.
Можно взять Yeoman
Там много разных шаблонов для создания проектов, навскидку generator-dotnet-project , generator-dotnetfs, generator-dotnet-project
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 12:41
Оценка:
_NN>Своё точно писать не стоит.
_NN>Можно взять Yeoman
_NN>Там много разных шаблонов для создания проектов, навскидку generator-dotnet-project , generator-dotnetfs, generator-dotnet-project

Во, точно, спасибо! Пытался вспомнить как он называется, думал boilr...
Re[6]: Шаблонный проект (dotnet new custom)
От: Ночной Смотрящий Россия  
Дата: 31.03.20 20:21
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Можно взять Yeoman


Тащить за собой ради такой мелочи ноду?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 21:02
Оценка:
_NN>>Можно взять Yeoman

НС>Тащить за собой ради такой мелочи ноду?


Вроде как не ноду а npm, да если даже и ноду — не так страшно, не в прод же тащить?
Все-таки ноду тащить, да, но тем не менее, не вижу проблемы.
Отредактировано 31.03.2020 21:06 Keith . Предыдущая версия .
Re[8]: Шаблонный проект (dotnet new custom)
От: Ночной Смотрящий Россия  
Дата: 31.03.20 21:06
Оценка:
Здравствуйте, Keith, Вы писали:

НС>>Тащить за собой ради такой мелочи ноду?

K>Вроде как не ноду а npm

npm без ноды что ли работает?

K>, да если даже и ноду — не так страшно, не в прод же тащить?


Ну это кому как. Если у тебя в проекте нет фронта, нода в одно место не уперлась.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Шаблонный проект (dotnet new custom)
От: okon  
Дата: 31.03.20 21:13
Оценка: 2 (1)
K>Product.Component.Core
K>Product.Component.Core.Repositories
K>Product.Component.Core.Services
K>Product.Component.Api.Contract
K>Product.Component.Api.Client
K>Product.Component.Api.Host
K>Product.Component.Queues.Contract
K>Product.Component.Queues.Client
K>Product.Component.Worker


K>Может кто-то знает более гибкое и удобное решения? Может даже с UI?

K>Или может кто-то знает хорошие структуры проектов типа приведенного выше?
K>Может кто-то своим вариантом поделится?
K>Буду очень благодарен за любые идеи!

Идея такая — а нафик столько модулей делать ?
Модуль это некая заменяемая единица, смысл вижу если
— есть разные реализации модуля
— есть дистрибутив где разный состав модулей


Например
Product.Component.Core
Product.Component.Core.Repositories
Product.Component.Core.Services

врятли имеют вариации в реализации, почему бы не сделать все в одном модуле.
врятли есть дистрибутив который будет работать без Product.Component.Core.Services или Product.Component.Core.Repositories

Аналогично с Api — оно нужно в отдельном модуле ? Может быть конфигурация без API или где для работы приложения не потребуется загрузить эти модули в память.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[9]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 31.03.20 23:23
Оценка:
НС>Ну это кому как. Если у тебя в проекте нет фронта, нода в одно место не уперлась.

Запускать же на машине разработчика или на сервере CI,
размер у него 50 MB, не вижу в этом проблемы.
Re[7]: Шаблонный проект (dotnet new custom)
От: _NN_ www.nemerleweb.com
Дата: 01.04.20 10:12
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, _NN_, Вы писали:


_NN>>Можно взять Yeoman


НС>Тащить за собой ради такой мелочи ноду?


Студия итак её принесёт при чём в двух вариантах 32бит и 64бит
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: Шаблонный проект (dotnet new custom)
От: Ночной Смотрящий Россия  
Дата: 01.04.20 10:50
Оценка:
Здравствуйте, _NN_, Вы писали:

НС>>Тащить за собой ради такой мелочи ноду?

_NN>Студия итак её принесёт при чём в двух вариантах 32бит и 64бит

Это планируют в ближайшее время пофиксить.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Шаблонный проект (dotnet new custom)
От: Keith  
Дата: 01.04.20 10:53
Оценка:
O>Идея такая — а нафик столько модулей делать ?

Отличный вопрос!

O>Модуль это некая заменяемая единица, смысл вижу если

O> — есть разные реализации модуля
O> — есть дистрибутив где разный состав модулей
O>Например
O>Product.Component.Core
O>Product.Component.Core.Repositories
O>Product.Component.Core.Services
O>врятли имеют вариации в реализации, почему бы не сделать все в одном модуле.
O>врятли есть дистрибутив который будет работать без Product.Component.Core.Services или Product.Component.Core.Repositories

Редко, но бывает, что реализации разные или что сервисов достаточно без репозиториев.
Но согласен, может проще по дефолту в одну сборку складывать.
Для сборки с тестами зависимости ненужные, если хочется только домен протестировать, например,
но это тоже не критично, можно иметь
Product.Component.Core
и
Product.Component.Core.Test
где тестировать все сразу — и домен и DAL и сервисы...
Просто не по Феншую как-то все в одной куче выглядит,
тем более что разделить на сборки ничего не стоит и выглядит сразу приятней как-то для глаз...

O>Аналогично с Api — оно нужно в отдельном модуле ? Может быть конфигурация без API или где для работы приложения не потребуется загрузить эти модули в память.


Да, контракт без клиента не помню чтоб использовался, поэтому уже объединили.

Вот такая структура получилась, если упростить до предела:

Product.Component.Core
Product.Component.Client
Product.Component.Server

Спасибо за идею!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.