modeling{
	 from :domain_driven_design
	 to :internal_dsls?
}

#Phillip Calçado
#http://fragmental.tw
#pcalcado@gmail.com
Turing Complete
Business
                      An User
                   belongs to a group.
                   He must authenticate
    ...
Application   User pays Bill from his Group

 Domain
              User, Group, Bill...
 Model

Language      class, modul...
SELECT
 u.name, g.name
FROM
 (SELECT p.name
 FROM USER u, PEOPLE p
 WHERE u.status=’published’
 AND u.id = p.id) u,
 GROUP...
Application   User pays Bill from his Group

 Domain
              User, Group, Bill...
 Model

Language      class, modul...
Application   User pays Bill from his Group


 Domain
               User, Group, Bill...
 Language

        1001010100110...
Business
                  An User
               belongs to a group.
               He must authenticate
                ...
External DSLs
External DSLs
Internal DSLs
Person
           name
           birth_date




               User
Customer   login          *   1   Group
           pa...
['20080102', '18:23:06,026'] - (INFO quot;Program startedquot;)
['20080102', '18:23:07,027'] - (DEBUG quot;Infra-checkquot...
@log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,26), :info,
quot;Program startedquot;)
@log << LogEntry.new(Time.mkti...
#eof
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
From Domain-Driven Design to internal Domain-Specific Languages?
Upcoming SlideShare
Loading in …5
×

From Domain-Driven Design to internal Domain-Specific Languages?

4,940 views

Published on

I’ve presented at ThoughtWorks Melbourne tech forum today. Tech forums are short presentations we have 2 times a month, a nice excuse to get people around the office, enjoy free lunch and discuss about some geeky stuff. We had a very nice talk about Internal Domain Specific Languages.

Feel free to download the slides and the script I used during the talk -without that the scripts the slides aren’t very useful. Find that at:

http://fragmental.tw/2008/02/26/internal-dsls-thoughtworks-tech-forum/

Published in: Technology, Business
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,940
On SlideShare
0
From Embeds
0
Number of Embeds
58
Actions
Shares
0
Downloads
80
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

From Domain-Driven Design to internal Domain-Specific Languages?

  1. 1. modeling{ from :domain_driven_design to :internal_dsls? } #Phillip Calçado #http://fragmental.tw #pcalcado@gmail.com
  2. 2. Turing Complete
  3. 3. Business An User belongs to a group. He must authenticate using a login. Dev class User attr_reader :login, :group def authenticate(login) #do stuff end end
  4. 4. Application User pays Bill from his Group Domain User, Group, Bill... Model Language class, module, def... 10010101001100101010101010101 11010111010001000001111100000
  5. 5. SELECT u.name, g.name FROM (SELECT p.name FROM USER u, PEOPLE p WHERE u.status=’published’ AND u.id = p.id) u, GROUP g WHERE g.id = u.group_id AND g.type = ‘ADMIN’
  6. 6. Application User pays Bill from his Group Domain User, Group, Bill... Model Language class, module, def... 10010101001100101010101010101 11010111010001000001111100000
  7. 7. Application User pays Bill from his Group Domain User, Group, Bill... Language 10010101001100101010101010101 11010111010001000001111100000
  8. 8. Business An User belongs to a group. He must authenticate using a login. Dev authenticate ‘phill’
  9. 9. External DSLs
  10. 10. External DSLs
  11. 11. Internal DSLs
  12. 12. Person name birth_date User Customer login * 1 Group password authenticate
  13. 13. ['20080102', '18:23:06,026'] - (INFO quot;Program startedquot;) ['20080102', '18:23:07,027'] - (DEBUG quot;Infra-checkquot;) ['20080102', '18:23:08,028'] - (INFO quot;Checking classloadersquot;) ['20080102', '18:23:09,029'] - (WARN quot;Classloader not set properlyquot;) ['20080102', '18:23:10,030'] - (ERROR <<TEXT Could not load the org.jboss.webservice.server.Service interceptor java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.webservice.server.ServiceEndpointInterceptor at org.jboss.mx.loading(LoadMgr3.java:212) at org.jboss.mx.loading(RepositoryClassLoader.java:490) at org.jboss.mx.loading(RepositoryClassLoader.java:392) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at org.jboss.util.loading.(DelegatingClassLoader.java:89) at org.jboss.mx.loadClass(LoaderRepositoryClassLoader.java:90) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) TEXT ) ['20080102', '18:23:09,029'] - (INFO quot;Program finishedquot;)
  14. 14. @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,26), :info, quot;Program startedquot;) @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,27), :debug, quot;Infra-checkquot;) @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,26), :info, quot;Checking classloadersquot;) @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,28), :warn, quot;Classloader not set properlyquot; ) @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,29), :error, quot;Could not load the org.jboss.webservice.server.Service interceptor njava.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.webservice.server.ServiceEndpointInterceptorn at org.jboss.mx.loading(LoadMgr3.java:212)n at org.jboss.mx.loading(RepositoryClassLoader.java:490)nnat org.jboss.mx.loading(RepositoryClassLoader.java:392)nat java.lang.ClassLoader.loadClass(ClassLoader.java:235)nat org.jboss.util.loading.(DelegatingClassLoader.java:89)nat org.jboss.mx.loadClass(LoaderRepositoryClassLoader.java:90)nat java.lang.ClassLoader.loadClass(ClassLoader.java:235)quot;) @log << LogEntry.new(Time.mktime(2008,01,02,18,23,06,30), :info, quot;Program finishedquot;)
  15. 15. #eof

×