practical code generation

Post on 19-Jan-2016

56 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Practical Code Generation. Peter Bell SystemsForge. Overview. Who am I? Why Listen? Problems to solve Potential solutions Domain Specific Languages Software Product Lines Code Gen/Frameworks Next Steps. Who Am I?. Programmer - 30-40 projects/yr. - PowerPoint PPT Presentation

TRANSCRIPT

http://europe.cfunited.com/ March 12 & 13, 2007

Practical Code GenerationPractical Code Generation

Peter BellSystemsForge

March 12 & 13, 2007http://europe.cfunited.com/

OverviewOverviewWho am I?

Why Listen?

Problems to solve

Potential solutions

Domain Specific Languages

Software Product Lines

Code Gen/Frameworks

Next Steps

March 12 & 13, 2007http://europe.cfunited.com/

Who Am I?Who Am I?Programmer - 30-40 projects/yr.

Researcher - Published academic papers DSM forum/ooPSLA

Entrepreneur - Profitable/practical

SystemsForge - 10,000 custom apps/yr.

Writer - CFDJ, Fusion Authority Quarterly

Presenter - cf.objective(), CF United, Frameworks, Code Generation 2007, ooPSLA, Domain Specific Modeling Forum, CFCamp . . .

March 12 & 13, 2007http://europe.cfunited.com/

Why Listen?Why Listen?

Companies are reporting 5-10x faster development using Domain Specific Languages and Software Product Lines

You’re already doing these things

A few concepts will help you to do them better

March 12 & 13, 2007http://europe.cfunited.com/

CalibrationCalibration

Have you:

Written OO code?

Heard of DSLs?

Written a DSL?

Heard of SPLs

Created a SPL?

March 12 & 13, 2007http://europe.cfunited.com/

ProblemsProblems

OO coding is slow

Changes are painful

Reuse is difficult

March 12 & 13, 2007http://europe.cfunited.com/

OO Coding is SlowOO Coding is Slow

ProductService.cfc

ProductDAO.cfc

Product.cfc

tbl_Product

ColdSpring/Lightwire config

Admin controller/views

Front end controller

Catalog.cfc

Front end views

ProductList.cfm, ProductDetail.cfm

Add Products to site . . .

March 12 & 13, 2007http://europe.cfunited.com/

Changes are PainfulChanges are Painful

Add services from tbl_Service to product catalog

Products -> multiple categories

Change form error handling (error list to in-form display)

March 12 & 13, 2007http://europe.cfunited.com/

Re-use is DifficultRe-use is DifficultLibraries/utility components/cut and paste/snippets - usually OK

Problem with cfc reuse is usually cross cutting concerns:

Logging

Error handlers

Notification services

Other dependencies . . .

March 12 & 13, 2007http://europe.cfunited.com/

Solving Same ProblemsSolving Same Problems

Solutions

Content management

Workflow

Shopping carts

Techniques

Form processing

DB access

Paginated lists

Reporting

Imports/Exports

March 12 & 13, 2007http://europe.cfunited.com/

Potential SolutionsPotential Solutions

Code quicker - DSL

Maintain easier - DSL

Re-use better - SPL

March 12 & 13, 2007http://europe.cfunited.com/

Domain Specific LanguageDomain Specific Language

“An executable language targeted to a specific problem domain”

Specific - can’t do everything

Executable - not just conceptual

Raising level of abstraction

March 12 & 13, 2007http://europe.cfunited.com/

Types of DSLsTypes of DSLsHorizontal (tech focused)

SQL

RegEx

Import description language

General workflow language

Vertical (business focused)

Insurance policy language

Product configuration language

Academic requirements language

March 12 & 13, 2007http://europe.cfunited.com/

Types of DSLs - InternalTypes of DSLs - Internal

Custom tag

<cf_import filename="test.csv" record-delimiter="," field-name-list="FirstName,LastName,Email" source="tbl_User" method="update">

API

UserService.import("test.csv", ",", "FirstName,LastName,Email", "tbl_User", "update");

Method Chaining

User.IsValid.FirstName()

March 12 & 13, 2007http://europe.cfunited.com/

Types of DSL - ExternalTypes of DSL - ExternalComma delimited

"test.csv", ",", "FirstName,LastName,Email", "tbl_User", "update"

XML

<import filename="test.csv" record-delimiter="," field-name-list="FirstName,LastName,Email" source="tbl_User" method="update" />

Databased

“Little Language”

Import test.csv using commas update tbl_User with FirstName,LastName,Email

Visual

March 12 & 13, 2007http://europe.cfunited.com/

DSL Key ConceptDSL Key ConceptAbstract Grammar vs. Concrete Syntax

What you say vs. How you say it

User@FirstName

<cfset Objects.User.Title = “User”><cfset Objects.User.Attributes.Name = “FirstName”>

<Object title=”User”> <Name>FirstName</Name></Object>

March 12 & 13, 2007http://europe.cfunited.com/

Example DSLExample DSLProduct extends: BaseObject tableName: tbl_ProductIdentity: ProductID

Properties: Title title required Price money optional default:0 Description WYSIWYG optional

ClassMethods: AdminList: Title,Price OrderBy Title DefaultAdd: Title,Price,Description QuickAdd: Title,Price multiple:5 DefaultEdit: ID, Title,Price,Description

Relationship has-many Category associated optional

March 12 & 13, 2007http://europe.cfunited.com/

Benefits of DSLsBenefits of DSLs

More concise (less to write/edit)

Can add constraints

MAY be end user editable

March 12 & 13, 2007http://europe.cfunited.com/

Software Product LinesSoftware Product LinesDesign a collection of applications

Bounded and unbounded variability

Bounded: feature model/configuration

Unbounded: DSLs

Extension points

March 12 & 13, 2007http://europe.cfunited.com/

Code Gen/FrameworkCode Gen/Framework

Both use DSLs

Compiled/interpreted

Late bound decision

March 12 & 13, 2007http://europe.cfunited.com/

Next StepsNext StepsMultiple Applications?

Plan variability

Feature model

Configuration options

DSLs

Generators/framework

Single Application?

Reusable services

Raise abstraction levels

DSLs: Custom tags, APIs, external config files, CMSs, visual editors (Eclipse EMF)

March 12 & 13, 2007 22

http://europe.cfunited.com/

Questions?Questions?

Blog: www.pbell.com

Email: peter@pbell.com

Yahoo: freshstartsw

AIM: appgeneration

top related