Domain Driven Web Development With WebJinn

Sergei Kojarski, Northeastern University
David H. Lorenz, Northeastern University

Web-application development cuts across the HTTP protocol, the client-side data presentation languages (HTML, XML), the server-side technology (Servlets, JSP, ASP, PHP), and the underlying resource (files, database, information system). Consequently, different web development design concerns including functionality, presentation, control, and structure are tangled and scattered, leading to code that is hard to develop, maintain, and reuse. In this paper we analyze the cause and consequences of crosscutting in existing web development technologies. We distinguish between intra-crosscutting that results in code tangling and inter-crosscutting that results in code scattering. All current web development models including MVC fail to address inter-crosscutting. We present two new web development models: XP and DDD. The XP model introduces extension points as place-holders for structure-dependent code. The DDD model extends the MVC framework with extension points. We present a novel domain-driven web development framework named WebJinn that completely separates web development concerns. The result is a significant improvement in web development in terms of reuse. WebJinn has been used to develop web application at several web sites.

In Special Track on Domain Driven Development, International Conference on Object-Oriented Programming, Systems and Applications, Anaheim, California October 26-30, 2003, pages 53-65. OOPSLA 2003, ACM Presss.

paper.html (html) (96k)

oopsla03b.pdf (272k)

The slides from the OOPSLA presentation: (424k)

    Author = "Sergei Kojarski and David H. Lorenz",
    Note = "OOPSLA 2003 Special Track on Domain-Driven Development",
    Pages = "53--65",
    Title = "Domain Driven Web Development With {WebJinn}",
    Year = 2003,
    Crossref = "COMPAN:OOPSLA:2003",
    URL = "",
--------- OOPSLA crossref begin ---------
@String{SIGPLAN = "ACM SIGPLAN Notices"}
@String{PROC = "Proceedings of "}
@String{ANNUAL = "Annual Conference on "}
@String{COMPAN = "Companion of "}
@String{OOPSLA = "Object-Oriented Programming Systems, Languages, and Applications"}
@String{PROC:OOPSLA2003 = PROC#" the 18$^{th}$"#ANNUAL#OOPSLA}
@String{COMPAN:OOPSLA2003 = COMPAN#" the 18$^{th}$"#ANNUAL#OOPSLA}
@String{OOPSLA2003 = "OOPSLA'03"}
    Address = {Anaheim, California},
    Booktitle = PROC:OOPSLA2003,
    Key = OOPSLA2003,
    Organization = OOPSLA2003,
    Publisher = SIGPLAN#{ 38(10) }#Oct#{ 2003},
    Title = PROC:OOPSLA2003,
    Year = 2003,
    Address = {Anaheim, California},
    Booktitle = COMPAN:OOPSLA2003,
    Title = COMPAN:OOPSLA2003,
    Year = 2003,
    Publisher = {ACM Press},
---------- OOPSLA crossref end ----------