В C# есть модификатор доступа internal, который закрывает свойство или метод для всего, кроме текущей сборки (сборка это по сути группа пространств имён). И это чертовски удобно для построения правильной архитектуры по DDD — ты делаешь домен отдельной сборкой без внешних зависимостей, у сущностей закрываешь сеттеры и другие поля модификатором internal, а бизнес-правила с открытыми методами уже пишешь в агрегатах, которые содержат эти сущности. Агрегаты объявлены в той же сборке, так что они могут с сущностями делать что угодно, но слой приложения уже сможет вызвать только метод агрегата.
Пример. Есть бизнес-процесс, который включает в себя две сущности: письмо и прикреплённый к нему документ. У каждой из этих сущностей разные жизненные циклы, но письмо можно отправить только в том случае, если статус документа "Согласован". Мы делаем агрегат "письмо с документом" и там public-метод отправки письма сначала проверяет статус документа, а потом вызывает internal-метод отправки в сущности письма. Снаружи (вне домена) вызвать сразу отправку письма невозможно.
Но как эту задачу решают разработчики на других языках? Я совершенно не понимаю, как сделать хорошую архитектуру без internal. Окей, в некоторых языках вообще нет вменяемого ОПП и системы типов, но и к таким ребятам я бы не подходил с вопросами об энтерпрайз-архитектуре. Однако, многие серьёзные проекты пишутся на Java или, скажем, Go, что делают разработчики там? Может, кто-нибудь знает, и расскажет мне в комментариях?
#dev
#Italia
#Volt|G/EFA annuncia la sua partecipazione alle primarie della coalizione progressista: “Ci saremo per cambiare le regole del gioco. Serve una squadra, non leader soli al comando”.
Volt ha inoltre annunciato l’inizio di un percorso di ascolto sul territorio, per incidere sul programma di coalizione, mettendo al centro la crisi abitativa, la transizione energetica e azioni per ridurre la precarietà.
Tra le proposte anche quella di modificare il sistema di voto delle primarie, introducendo il voto supplementare (dove l’elettore indica una prima e una seconda scelta per garantire una convergenza immediata sul candidato più condiviso) o il sistema del STV.
@OsservatorioItaliano
#Italia
Nota #Volt|G/EFA: "Riteniamo uno squallido teatrino l'intervista di #Lavrov a Zona Bianca, su Rete4. Il fatto che venga permesso al ministro degli esteri russo di divulgare la propaganda russa in prima serata è squalificante per l'intero giornalismo televisivo italiano."
@UltimoraPolitics
#Italia
Gianluca #Guerra (#Volt|G/EFA): "Ius Scholae salta da calendario della Camera per colpa della Lega che ancora una volta si dimostra capace di raggiungere risultati solo quando si devono negare diritti civili e umani. È anche chiaro che questa maggioranza non potrà mai portare progresso sociale."
@UltimoraPolitics
#Italia#UE
Gianluca #Guerra (#Volt|G/EFA): "Con le dimissioni di Fabrice Leggeri, forse finalmente capiremo che c'è qualcosa che non va con Frontex e si inizierà ad agire.
Pushback illegali, mancata trasparenza sugli atti, procedure forzate. Tutto questo giocando con la vita di migliaia di esseri umani."
@UltimoraPolitics
#UE
Francesca Romana #DAntuono, copresidente #Volt|G/EFA: "Vogliamo creare una rivoluzione nel Parlamento Europeo: 25 membri di Volt da almeno 7 paesi invaderanno il Parlamento. Persone di ogni genere, etnia, origine, orientamento sessuale, disabilità o background sociale: insieme aggiusteremo l'UE."
@UltimoraPolitics
#UE
Francesca Romana #DAntuono, copresidente #Volt|G/EFA: "Putin ha invaso l'Ucraina, uccidendo civili innocenti e commettendo indimenticabili crimini contro l'umanità. Non staremo a guardare l'invasione."
@UltimoraPolitics
#UE#Ucraina
🇺🇦 Mykhaylo #Pobigay (#Volt|G/EFA): "L'Unione Europea ha bisogno di più integrazione, di nuovi membri e di un esercito europeo."
@UltimoraPolitics