Presentation is loading. Please wait.

Presentation is loading. Please wait.

By Chad Myers LosTechies.com.  Housekeeping Stuff  Meet the Presenter  ALT.NET  LosTechies.com.

Similar presentations


Presentation on theme: "By Chad Myers LosTechies.com.  Housekeeping Stuff  Meet the Presenter  ALT.NET  LosTechies.com."— Presentation transcript:

1 By Chad Myers LosTechies.com

2  Housekeeping Stuff  Meet the Presenter  ALT.NET  LosTechies.com

3  Lambda Functions ◦ Inline and Multiline ◦ Block  Closures  Type, List, and Dictionary Initializers  Type Inferrence  Basics of Expression Trees  Static Reflection

4  What? – “Language within a Language” for targeted, specific purpose  Why? – To enhance the usability of an API designed and highly targeted for a specific purpose  Who? – Martin Fowler, Jeremy Miller, Ayende Rahien, Jay Fields  When? – In.NET, primarily since C# 3.0 (mini-DSLs in.NET have existed since 1.1)  How? – Attend this Workshop! Read Fowler, Miller, Rahien, Fields

5  Bending an existing language and compiler  Unconventional – but still disciplined – use of language techniques (Language Oriented Programming)  Focus on Flow, Comprehension and Accelerated Use of Finished Product  Should Be (Outwardly…): ◦ Expressive ◦ Efficient/Productive ◦ Conventional (in the context of the domain) ◦ Discoverable, Flowing

6  Small DSLs ◦ Problem/Purpose Identification ◦ Pattern Application ◦ Refactoring  Large DSLs ◦ Problem/Purpose Identification ◦ Major component Identification and Minimal Design ◦ Pattern Application ◦ Refactoring

7  End Result ◦ Generative ◦ Non-Generative  Internal Structure ◦ Semantic Model (Internal & External) ◦ No Model

8  Before we get into the meat, any questions?

9  Building Block Concepts ◦ Context Variables and State Management ◦ Generic Type Specifiers  Building Block Patterns ◦ Method Chaining ◦ Nested Function ◦ Nested Closure ◦ Literal Type/Collection Expression (Initializers) ◦ Dynamic Reception (Extension Methods) ◦ Parse Tree Manipulation (Expression Trees)

10  Structural Patterns ◦ Expression Builder ◦ Object Scoping ◦ Delegation (Nested Closures Revisited) ◦ Convention

11  Start with Host Object  Return Host Object from Each Call  Modifies State or Performs an Action  Purpose: ◦ Assembly/Population of an Object or Objects ◦ Allows for in-line or multi-line statements ◦ Provides clear path for consumers  Examples: ◦ System.DateTime ◦ System.String

12  Small, Focused, Deterministic  Encapsulates Frequent Tasks  Helps Keep Flow  Helps Enhance Language  Examples: ◦ DateTime.Parse(), *.Parse() ◦ TimeSpan.FromMinutes

13  Delegation  Scoping  Physical Separation of Tasks  Deterministic Resolution of Task  Solves “Rathole” Problem  Examples: ◦ Registry.Scan (StructureMap) ◦ PersistenceModel.ForEach (Fluent Nhibernate)

14  Type/Collection/Dictionary Initializers  Can Replace Method Chaining in Many Circumstances  Can be More Expressive, in Less Spaces  Examples: ◦ MsSqlConifgurationTester (Fluent Nhibernate)

15  In C# 3.0, this means Extension Methods  In C# 4.0, much, much more  Attaching Different Behavior to Existing API  Extensibility Point for Existing DSLs  Allows for Different Grammars for Same API  Examples: ◦ XmlExtensions (Fluent Nhibernate) ◦ Specification Extensions (Fluent Nhibernate)

16  In C#, this means Expression Trees  Useful for Static Reflection  Can Compose Expressions  Examples: ◦ ClassMap (Fluent Nhibernate) ◦ EntityQuery stuff (Fluent Nhibernate)

17  Any questions on building block patterns?

18  State Management  Progressive Interfaces  The “Rathole” Problem  Examples: ◦ CascadeExpression (Fluent Nhibernate) ◦ ManyToManyPart (Fluent Nhibernate) ◦ ActionLinkExpression (Dovetail) ◦ ExpressionBase (Dovetail)

19  Can be used directly, or serves as base class  Contains starter methods  Launching point for other patterns  Examples: ◦ Registry (StructureMap) ◦ PersistenceModel (Fluent Nhibernate)

20  Can also be structural  Examples: ◦ ObjectFactory.Initialize (StructureMap)

21  Discovery of types  Identification of interesting types  Application  Examples: ◦ ITypeScanner (StructureMap) ◦ AutoPersistenceModel (Fluent Nhibernate)

22  Any questions on structural patterns?

23  Build a model-based generative Internal DSL for writing a fairy tale story  End result: Print the story to the debug window  Demonstrate as many patterns as possible in one DSL

24  FairyTale object  Story Parts (Intro, focus, plot, ending)  Rendering

25  Delegation -- Nested Closure  Expression Builder in closure  Method Chaining with Generic Type Specifiers  Literal Type Expressions  Parse Tree Manipulation  Dynamic Reception

26  Any questions on Fairy Tale Builder?

27  Chad Myers  Martin Fowler’s DSL WIP


Download ppt "By Chad Myers LosTechies.com.  Housekeeping Stuff  Meet the Presenter  ALT.NET  LosTechies.com."

Similar presentations


Ads by Google