CSC/ECE 517 Fall 2010/ch2 2a mw: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 1: Line 1:
==Introduction==
==Introduction==
In the previous article [final S24 link here], we learn that metaprogramming is where the computer code that interacts with other programs, such as databases,  as data and performs many of these interactions at compile time rather than runtime.  This built-in interaction allows the programmers to take advantage of these capabilities and focus their time on the rest of their program logic instead of the details of some of the lower level coding.  In this article, we will take a closer look at of the styles of metaprogramming referred to as language extensions for [http://en.wikipedia.org/wiki/Object-relational_mapping object-relational mapping (ORM)].
In the [http://linktoS24atricleonwikipage.com previous article], we learn that metaprogramming is where the computer code interacts with other programs as data and performs many of these interactions at compile time rather than runtime.  This built-in interaction allows the programmers to take advantage of these capabilities and focus their time on the rest of their program logic instead of the details of some of the lower level coding.  In this article, we will take a closer look at one of the styles of metaprogramming referred to as language extensions for [http://en.wikipedia.org/wiki/Object-relational_mapping object-relational mapping (ORM)] through examples and some comparisons of language extensions and tools.


==Language Extensions==
==Language Extensions==
Language extensions for ORM have often been traditionally classified as design patterns or software tools used to perform basic [http://en.wikipedia.org/wiki/Create,_read,_update_and_delete create, read, update and delete (C.R.U.D.)] operations on relational databases, that is, until recent new approaches such as [http://en.wikipedia.org/wiki/ActiveRecord#Ruby ActiveRecord] have grown in popularity.  ActiveRecord is not just a design pattern it is an increase of function to the active record pattern approach by adding [http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29 inheritance] and [http://en.wikipedia.org/wiki/Association_%28object-oriented_programming%29 associations].  Examining ActiveRecord and other language extensions will allow for comparisons of the ease of programming using these language extensions verses the conventional database oriented systems approach.


Language extensions for ORM have often been classified as design patterns or software tools used to perform [http://en.wikipedia.org/wiki/Create,_read,_update_and_delete create, read, update and delete (C.R.U.D.)] operations on relational databases, that is, until recent new approaches such as [http://en.wikipedia.org/wiki/ActiveRecord#Ruby ActiveRecord ].  ActiveRecord is not just a design pattern it is an increase of function to the active record pattern approach.  ActiveRecord is tightly integrated support that is built into the Ruby on Rails frameworkIn this article we will examine other language extensions that try to use this same approach and then we will compare the ease of programming using these language extensions with the ease of programming using external tools.
==Ruby and ActiveRecord==
All too often programmers are faced with the challenge of persisting objects from their program into a datastore.  Custom code is created for this purpose that can be complex or difficult for others to understand as well as not seem natural.  Applications that are designed to persist data have the need to know how the objects correspond to the information stored in these database tables.  [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails], first released in 2005, is able to provide a uniform method to help resolve these complicated issues without sacrificing function by using ActiveRecord (AR). AR is a persistence engine that comes as part of Ruby on Rails. It creates a persistable domain model from business objects and database tables, where logic and data are presented as a unified package [http://en.wikipedia.org/wiki/ActiveRecord#Ruby 3].  AR is admired for its simplistic and elegant approach of removing these levels of complexity.  It allows for a pluggable solution to many different popular databases available today to include: MySQL, SQLite, SQL Server, PostgreSQL, and Oracle.  Ruby, Ruby on Rails, and ActiveRecord continue to grown in popularity due to not only the curiosity of programmers but their ability to improve function and feature sets while maintaining the initial intent of the language, “trying to make Ruby natural, not simple” -- Yukihiro “matz” Matsumoto [http://www.ruby-lang.org/en/about/ 7].   
 
ActiveRecord uses a [http://en.wikipedia.org/wiki/Single_Table_Inheritance Single Table Inheritance] to allow for inheritance capabilities and provides a set of macros for association relationships between classes of objects.  AR is not only a component of the [http://en.wikipedia.org/wiki/Model-view-controller Model view-controller] for Ruby on Rails but it is also a standalone ORM package for Ruby itselfOther languages have been able to learn from AR and have tried to add this for themselves.  Let’s take a closer look at some other implementations that attempts to duplicate AR’s elegance.


==ActiveRecord==
==Other Examples of Language Extensions==
==Other Examples of Language Extensions==
* [http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework ADO.NET Entity Framework], Microsoft's ORM, part of [http://en.wikipedia.org/wiki/.NET_Framework .NET] 4.0
First developed in 2008, the Entity Framework tries to remove ORM mismatches that often plague conventional database oriented programs.  ADO uses an Entity data model (EDM) that to create an Entity-Relationship data model that defines the Relationships associated to each Entity.  The EDM consists of a schema and a mapping specification.  The schema defines the data types from the entities and the mapping provides the connections between the database scheme and the


* Java - Enterprise Objects Framework, Mac OS X/Java, part of Apple WebObjects
* [http://en.wikipedia.org/wiki/Django Django], (ORM is included in Django framework) open source
* .NET - ADO.NET Entity Framework, Microsoft's ORM, part of .Net 4.0
 
* Python - Django, (ORM is included in Django framework) open source
* [http://en.wikipedia.org/wiki/Enterprise_Objects_Framework Enterprise Objects Framework], Mac OS X/Java, part of Apple [http://en.wikipedia.org/wiki/WebObjects WebObjects]


==Programming using Language Extensions==
==Programming using Language Extensions==
Several language extensions have been introduced in previous sections of the article
show some examples and comparisons of them.


==Programming using External Tools==  
==Programming using External Tools==  
==Which is better?  Language Extensions or External Tools==


==Conclusion==
==Conclusion==
==Whats Next?==
2b.  Software for CRC cards.  Software packages support the creation of CRC cards, and other artifacts of o-o design.  Compare them on ease of use, and also look for evidence of how much easier they make the overall design task.


==References==
==References==
Line 23: Line 37:
#[http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks Comparison of web application frameworks]
#[http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks Comparison of web application frameworks]
#[http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software List of object-relational mapping software]
#[http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software List of object-relational mapping software]
#[http://en.wikipedia.org/wiki/ActiveRecord#Ruby ActiveRecord Ruby]
[http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework ADO.NET Entity Framework]
#[http://en.wikipedia.org/wiki/Django Django]
#[http://en.wikipedia.org/wiki/Enterprise_Objects_Framework Enterprise Objects Framework]
#[ http://ruby-doc.org/docs/ProgrammingRuby/ Programming Ruby - The Pragmatic Programmer's Guide]
#[ http://www.ruby-lang.org/en/about/ Ruby – A Programmers Best Friend]

Revision as of 19:45, 16 September 2010

Introduction

In the previous article, we learn that metaprogramming is where the computer code interacts with other programs as data and performs many of these interactions at compile time rather than runtime. This built-in interaction allows the programmers to take advantage of these capabilities and focus their time on the rest of their program logic instead of the details of some of the lower level coding. In this article, we will take a closer look at one of the styles of metaprogramming referred to as language extensions for object-relational mapping (ORM) through examples and some comparisons of language extensions and tools.

Language Extensions

Language extensions for ORM have often been traditionally classified as design patterns or software tools used to perform basic create, read, update and delete (C.R.U.D.) operations on relational databases, that is, until recent new approaches such as ActiveRecord have grown in popularity. ActiveRecord is not just a design pattern it is an increase of function to the active record pattern approach by adding inheritance and associations. Examining ActiveRecord and other language extensions will allow for comparisons of the ease of programming using these language extensions verses the conventional database oriented systems approach.

Ruby and ActiveRecord

All too often programmers are faced with the challenge of persisting objects from their program into a datastore. Custom code is created for this purpose that can be complex or difficult for others to understand as well as not seem natural. Applications that are designed to persist data have the need to know how the objects correspond to the information stored in these database tables. Ruby on Rails, first released in 2005, is able to provide a uniform method to help resolve these complicated issues without sacrificing function by using ActiveRecord (AR). AR is a persistence engine that comes as part of Ruby on Rails. It creates a persistable domain model from business objects and database tables, where logic and data are presented as a unified package 3. AR is admired for its simplistic and elegant approach of removing these levels of complexity. It allows for a pluggable solution to many different popular databases available today to include: MySQL, SQLite, SQL Server, PostgreSQL, and Oracle. Ruby, Ruby on Rails, and ActiveRecord continue to grown in popularity due to not only the curiosity of programmers but their ability to improve function and feature sets while maintaining the initial intent of the language, “trying to make Ruby natural, not simple” -- Yukihiro “matz” Matsumoto 7.

ActiveRecord uses a Single Table Inheritance to allow for inheritance capabilities and provides a set of macros for association relationships between classes of objects. AR is not only a component of the Model view-controller for Ruby on Rails but it is also a standalone ORM package for Ruby itself. Other languages have been able to learn from AR and have tried to add this for themselves. Let’s take a closer look at some other implementations that attempts to duplicate AR’s elegance.

Other Examples of Language Extensions

First developed in 2008, the Entity Framework tries to remove ORM mismatches that often plague conventional database oriented programs. ADO uses an Entity data model (EDM) that to create an Entity-Relationship data model that defines the Relationships associated to each Entity. The EDM consists of a schema and a mapping specification. The schema defines the data types from the entities and the mapping provides the connections between the database scheme and the

  • Django, (ORM is included in Django framework) open source

Programming using Language Extensions

Several language extensions have been introduced in previous sections of the article show some examples and comparisons of them.


Programming using External Tools

Which is better? Language Extensions or External Tools

Conclusion

Whats Next?

2b. Software for CRC cards. Software packages support the creation of CRC cards, and other artifacts of o-o design. Compare them on ease of use, and also look for evidence of how much easier they make the overall design task.


References

  1. Comparison of web application frameworks
  2. List of object-relational mapping software
  3. ActiveRecord Ruby
ADO.NET Entity Framework
  1. Django
  2. Enterprise Objects Framework
  3. [ http://ruby-doc.org/docs/ProgrammingRuby/ Programming Ruby - The Pragmatic Programmer's Guide]
  4. [ http://www.ruby-lang.org/en/about/ Ruby – A Programmers Best Friend]