DSL's de negócio

4 views
Skip to first unread message

Rafael Noronha

unread,
Nov 8, 2009, 4:12:17 PM11/8/09
to .Net Architects
Gostaria de saber se, assim como eu, alguns de vocês vêem com bons
olhos a alternativa de solucionar regras de negócio complexas e
voláteis com o uso de DSL's de negócio (DSL's escritas).

Só conheço uma figura que teve coragem de colocar um negócio deste em
produção até então - Ayende Rahien, que boa parte de vocês deve
conhecer.

Alguma reflexão a respeito?

Um dia deixaremos de resolver este tipo de problema com famigerados
modelos de dados e telinhas de cadastro?

Realmente temos o que ganhar utilizando este tipo de soulução?

Raphael Molesim

unread,
Nov 9, 2009, 2:11:57 PM11/9/09
to .Net Architects
Rafael,

Eu vi uma utilização bem interessante do Fabio Kung com Ruby.

Durante o rails summit 2009 uma das palestras foi justamente o Kung
mostrando um cenário real de utilização no trabalho dele.

Ele criou uma DSL para gerenciamento de máquinas virtuais lá na
Locaweb.

Se quiser mais detalhes segue a apresentação dele:
http://www.slideshare.net/fabiokung/dsls-internas-e-ruby

Rafael Noronha

unread,
Nov 9, 2009, 4:24:23 PM11/9/09
to .Net Architects
Raphael,

Bem lembrado,
Eu soube da palestra do Kung e ainda não assisti.

DSL técnica tem bastante por aí.

DSL de negócio eu considero uma ferramenta muito poderosa, mas por
enquanto parece que o overhead técnico inviabiliza a sua adoção.

Giovanni Bassi

unread,
Nov 10, 2009, 11:04:24 AM11/10/09
to dotnetar...@googlegroups.com
Pois é. A grande questão é que custa caro fazer um DSL de negócio. Para valer a pena, a reutilização teria que ser muito alta. COnseguimos escrever código expressivo sem DSLs, daí a necessidade de construir uma API que demanda investimento alto para ficar fácil de ler para ser usada uma só vez... não se paga. E isso vale pra Ruby também, que, mesmo sendo mais fácil devido às características da linguagem, também tem um custo.

[]'s

Giovanni Bassi
Microsoft MVP, MCSD, MCPD, CSM
Arquiteto de software
http://www.giovannibassi.com


2009/11/9 Rafael Noronha <rafan...@gmail.com>

Rafael Noronha

unread,
Nov 12, 2009, 6:03:49 PM11/12/09
to .Net Architects
Giovanni,

Só vi sua resposta agora.
Concordo que o custo é alto, e mais do que isso, é uma ferramenta que
ainda não foi adotada por um contingente minimamente expressivo.

Penso que as DSL's de negócio possuem algo a oferecer que poucas
ferramentas também possuem: aproximação de analistas de negócio do
software escrito,

Passado um primeiro momento de concepcão, acredito também que a
ferramenta se mostre muito mais flexível do que as soluções que
adotamos atualmente - dentro do cenário apontado.

Um exemplo do cenário seria, a política de preços de uma rede de
varejo, ou coisa do tipo.
Ou seja, algo que podemos ir além de telas de cadastro.

Rodrigo Kumpera

unread,
Nov 13, 2009, 9:08:07 PM11/13/09
to dotnetar...@googlegroups.com
Por que você acha o custo alto? Escrever um interpretador para 1 DSL com sintaxe regular é razoavelmente fácil.
Minha percepção é que a maioria dos profissionais não tem a menor idéia de por onde começar e basta mencionar
LR(1) que a maioria corre de terror por conta das memórias das cadeiras de compiladores da faculdade.



2009/11/10 Giovanni Bassi <gig...@gmail.com>

Giovanni Bassi

unread,
Nov 13, 2009, 11:00:19 PM11/13/09
to dotnetar...@googlegroups.com
Oi Rodrigo,

É uma percepção minha, não tenho nenhum estudo para basear isso. Se você souber de algum estudo formal, ou até informal, que apresente a produtividade na construção e manutenção de uma aplicação com DSLs, eu gostaria de ver. Tenho interesse no assunto, mas não tenho investido tempo porque meus clientes simplesmente não compram a idéia. A percepção é igual à minha: caro demais. Se é fácil ou se não é, considero irrelevante. Eu quero saber se se paga. Se se pagar, basta chamar alguém que saiba e goste de fazer, que o retorno é garantido.

E nesse caso, você está falando de DSLs externas. Acho que o Rafael está falando DSLs internas, que são ainda mais fáceis, já que a compilação, estrutura de tipos, parsing, etc, já estão todas prontas.


[]'s

Giovanni Bassi
Microsoft MVP, MCSD, MCPD, CSM
Arquiteto de software
http://www.giovannibassi.com


2009/11/14 Rodrigo Kumpera <kum...@gmail.com>

Rodrigo Kumpera

unread,
Nov 14, 2009, 8:17:32 AM11/14/09
to dotnetar...@googlegroups.com
Não sei de nenhum estudo. Falo apenas baseado em experiência própria e dos outros, que fizeram coisas semelhantes.

A dificuldade de construir uma DSL interna ou externa é muito parecida. Em ruby, por exemplo, para internas você precisa dominar todo
voodoo de metaprogramação necessário e para externas basta conhecer algum compiler-compiler.

Quanto a se pagar, isso depende muito do problema e de quanto ter uma DSL vai ajudar. Uma forma de verificar a viabilidade de uma
DSL é criar uma API declarativa e não imperativa, que são os alvos mais simples e fáceis para DSLs.



2009/11/14 Giovanni Bassi <gig...@giggio.net>

Mauricio Aniche

unread,
Nov 20, 2009, 7:33:25 PM11/20/09
to dotnetar...@googlegroups.com
Oi,

Também acho que escrever uma DSL externa não é tão complicado, afinal a parte chata já está mastigada: existem ferramentas para gerar interpretadores LL ou LALR (dependendo da complexidade da sua gramática) [1].

Mas caso não queira ter esse trabalho, pode aproveitar a facilidade de linguagens dinâmicas, como Ruby. Vi um caso real, onde o projeto (que atuava sobre o domínio de ações) era feito em Java e a DSL externa era em Ruby (utilizando o Script Engine do Java). O código Ruby era então interpretado e basicamente fazia wrapper para os métodos escritos em Java. Creio que seja possível fazer algo parecido em .NET também.

Não posso opinar sobre o custo de manter isso, pois nunca implementei uma DSL externa e a coloquei em produção. Mas concordo com a opinião do Kumpera, onde deve-se avaliar o quanto uma DSL iria ajudar.

[1] ANTLR ou SableCC respectivamente para o Mundo Java. Para o mundo .NET, é preciso procurar um pouco mais, mas deve ter.

Abraços,
Mauricio Aniche

2009/11/14 Rodrigo Kumpera <kum...@gmail.com>

Jeferson Spencer Chaves

unread,
Nov 21, 2009, 5:38:29 PM11/21/09
to dotnetar...@googlegroups.com
Meus 5¢: A algum tempo li sobre um lançamento da Microsoft: Um interpretador léxico gratuito, se não me falha a memória era o MGrammar.

Além disso eu também estava pesquisando sobre isso e encontrei que no SDK do Visual Studio 2008 existe um ferramental pra construir DSL's.

Alguém já tinha visto alguma destas duas soluções?

DSL no VS2008 SDK: http://msdn.microsoft.com/en-us/library/bb126235.aspx
MGrammar: http://msdn.microsoft.com/en-us/library/dd857654%28VS.85%29.aspx

Um abraço,
Jéferson

2009/11/20 Mauricio Aniche <maurici...@gmail.com>



--
------------------------------------------------------------
Jéferson Spencer Chaves

Juan Pedro A. Lopes

unread,
Nov 21, 2009, 6:10:32 PM11/21/09
to dotnetar...@googlegroups.com
Falando sobre analisadores léxicos, também tem o famosíssimo ANTLR, que tem targets pra C#. E o não-tão-famoso Irony. A vantagem do primeiro é ter sido o primeiro. Existem materiais de sobra sobre o ANTLR. A vantagem do último é que ele é escrito em managed code, ou seja, você pode permitir a "meta-criação" de linguagens. Ou mesmo criar as linguagens em C#, o que pode (ou não) ser uma conveniência.


2009/11/21 Jeferson Spencer Chaves <jeferso...@gmail.com>



--
Kind regards,
Juan Lopes

juanp...@gmail.com
con...@juanlopes.net
http://juanlopes.net
http://twitter.com/juanplopes

"E se o mundo não corresponde em todos os aspectos a nossos desejos, é culpa da ciência ou dos que querem impor seus desejos ao mundo?" - Carl Sagan

Felipe Teixeira

unread,
Nov 25, 2009, 8:41:13 AM11/25/09
to dotnetar...@googlegroups.com
http://msdn.microsoft.com/pt-br/library/dd129617%28en-us,VS.85%29.aspx
http://blogs.msdn.com/intellipad/default.aspx


Felipe Teixeira
Microsoft Certified Technology Specialist - MCTS - Microsoft .Net Framework 2.0
Application Development Foundation MS
Web -based Client Development
Mobile: +55 (11) 8021-6457
txdo...@googlewave.com
http://iguessimnotcrazy.wordpress.com/


2009/11/21 Juan Pedro A. Lopes <zero...@gmail.com>
Reply all
Reply to author
Forward
0 new messages