Patterns, frameworks, and middleware: their synergistic relationships
Proceedings of the 25th International Conference on Software Engineering
Agile regression testing using record & playback
OOPSLA '03 Companion of the 18th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Proceedings of the 26th International Conference on Software Engineering
The software architect: essence, intuition, and guiding principles
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
"Roundtrip architectural modeling"
APCCM '05 Proceedings of the 2nd Asia-Pacific conference on Conceptual modelling - Volume 43
A Hybrid Component-Based System Development Process
EUROMICRO '05 Proceedings of the 31st EUROMICRO Conference on Software Engineering and Advanced Applications
Finding the forest in the trees
OOPSLA '05 Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Transaction Support Using Unit of Work Modeling in the Context of MDA
EDOC '05 Proceedings of the Ninth IEEE International EDOC Enterprise Computing Conference
Organizing Multiple Data Sources for Developing Intelligent e-Business Portals
Data Mining and Knowledge Discovery
ICWE '06 Proceedings of the 6th international conference on Web engineering
Proceedings of the ISSTA 2006 workshop on Role of software architecture for testing and analysis
Composing simulation architectures for autonomic systems
The Knowledge Engineering Review
ACM-SE 45 Proceedings of the 45th annual southeast regional conference
Communications of the ACM - ACM at sixty: a look back in time
ActiveRDF: object-oriented semantic web programming
Proceedings of the 16th international conference on World Wide Web
Using Server Pages to Unify Clones in Web Applications: A Trade-Off Analysis
ICSE '07 Proceedings of the 29th international conference on Software Engineering
ArchVoc--Towards an Ontology for Software Architecture
SHARK-ADI '07 Proceedings of the Second Workshop on SHAring and Reusing architectural Knowledge Architecture, Rationale, and Design Intent
A Service-Oriented Blueprint for COTS Integration: the Hidden Part of the Iceberg
IWICSS '07 Proceedings of the Second International Workshop on Incorporating COTS Software into Software Systems: Tools and Techniques
Architectural design and analysis of an N-Tier enterprise application
IMSA'07 IASTED European Conference on Proceedings of the IASTED European Conference: internet and multimedia systems and applications
Agile enterprise software development using domain-driven design and test first
Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion
A practical high volume software product line
Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion
Towards a semantic web layered architecture
SE'07 Proceedings of the 25th conference on IASTED International Multi-Conference: Software Engineering
Service oriented architecture: tools and technologies
ICCOMP'07 Proceedings of the 11th WSEAS International Conference on Computers
Service oriented architecture: a new paradigm for enterprise application integration
ICCOMP'07 Proceedings of the 11th WSEAS International Conference on Computers
Service oriented architecture: potential benefits and challenges
ICCOMP'07 Proceedings of the 11th WSEAS International Conference on Computers
Learning patterns of application architecture by looking at code
ICCOMP'07 Proceedings of the 11th WSEAS International Conference on Computers
Capturing business transaction requirements in use case models
Proceedings of the 2008 ACM symposium on Applied computing
A case study evaluation of maintainability and performance of persistency techniques
Proceedings of the 30th international conference on Software engineering
Impact analysis of database schema changes
Proceedings of the 30th international conference on Software engineering
Model-typed component interfaces
Journal of Systems Architecture: the EUROMICRO Journal
A framework for the simulation of structural software evolution
ACM Transactions on Modeling and Computer Simulation (TOMACS)
Bridging the Object-Relational Divide
Queue - Object-Relational Mapping
Queue - Object-Relational Mapping
Simulation-based development of Peer-to-Peer systems with the RealPeer methodology and framework
Journal of Systems Architecture: the EUROMICRO Journal
Development of a tool for code automatic generation of persistent objects
Journal of Computational Methods in Sciences and Engineering - Selected papers from the International Conference on Computer Science,Software Engineering, Information Technology, e-Business, and Applications, 2003
An e-contracting reference architecture
Journal of Systems and Software
ActiveRDF: Embedding Semantic Web data into object-oriented languages
Web Semantics: Science, Services and Agents on the World Wide Web
Functional testing: a pattern to follow and the smells to avoid
Proceedings of the 2006 conference on Pattern languages of programs
Proceedings of the 2006 conference on Pattern languages of programs
Personalized Presentation in Web-Based Information Systems
SOFSEM '07 Proceedings of the 33rd conference on Current Trends in Theory and Practice of Computer Science
Describing Ontology Applications
ESWC '07 Proceedings of the 4th European conference on The Semantic Web: Research and Applications
Architectural Decisions and Patterns for Transactional Workflows in SOA
ICSOC '07 Proceedings of the 5th international conference on Service-Oriented Computing
Policy Based Messaging Framework
ICSOC '07 Proceedings of the 5th international conference on Service-Oriented Computing
Scaling Topic Maps
Integrating Component and Product Lines Technologies
ICSR '08 Proceedings of the 10th international conference on Software Reuse: High Confidence Software Reuse in Large Systems
Active Binding Technology: A Reuse-Enabling Component Model
ICSR '08 Proceedings of the 10th international conference on Software Reuse: High Confidence Software Reuse in Large Systems
Context-Aware Loading for Mobile Applications
NBiS '08 Proceedings of the 2nd international conference on Network-Based Information Systems
Towards a Dependency Constraint Language to Manage Software Architectures
ECSA '08 Proceedings of the 2nd European conference on Software Architecture
A Pattern Language Verifier for Web-Based Enterprise Applications
MoDELS '08 Proceedings of the 11th international conference on Model Driven Engineering Languages and Systems
Design Space of Heterogeneous Synchronization
Generative and Transformational Techniques in Software Engineering II
Managing architectural emergence: A conceptual model and simulation
Decision Support Systems
Engineering of Software-Intensive Systems: State of the Art and Research Challenges
Software-Intensive Systems and New Computing Paradigms
Ontological approach to the specification of properties of software systems and their components
Cybernetics and Systems Analysis
Enforcing code security in database web applications using libraries and object models
LCSD '07 Proceedings of the 2007 Symposium on Library-Centric Software Design
Tool Support for Pattern Selection and Use
Electronic Notes in Theoretical Computer Science (ENTCS)
Business Modeling: A Practical Guide to Realizing Business Value
Business Modeling: A Practical Guide to Realizing Business Value
Towards generic representation of web applications: solutions and trade-offs
Software—Practice & Experience
Developing and Evolving a Multi-agent System Product Line: An Exploratory Study
Agent-Oriented Software Engineering IX
Service-Oriented Computing --- ICSOC 2008 Workshops
Using test case patterns to estimate software development and quality management cost
Software Quality Control
Language design for distributed objects
Proceedings of the 1st International Workshop on Distributed Objects for the 21st Century
euHeartDB: A Web-Enabled Database for Geometrical Models of the Heart
FIMH '09 Proceedings of the 5th International Conference on Functional Imaging and Modeling of the Heart
CAiSE '09 Proceedings of the 21st International Conference on Advanced Information Systems Engineering
A dependency constraint language to manage object-oriented software architectures
Software—Practice & Experience
EMod: platform independent modelling, description and enactment of parameterisable EAI patterns
Enterprise Information Systems - Towards Model-driven Service-oriented Enterprise Computing - 12th International IEEE EDOC Enterprise Computing Conference (EDOC 2008)
Towards automatic integration of the business-data layers in enterprise-systems
Journal of Computational Methods in Sciences and Engineering
Implementation of the hierarchy of atomic literal types in an object system based of RDBMS
Programming and Computing Software
Remote Batch Invocation for Compositional Object Services
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Journal of Systems and Software
Viewpoints in complex event processing: industrial experience report
Proceedings of the Third ACM International Conference on Distributed Event-Based Systems
Discovery of architectural layers and measurement of layering violations in source code
Journal of Systems and Software
A framework for distributed mediation of temporal-abstraction queries to clinical databases
Artificial Intelligence in Medicine
Business logic for geoprocessing of distributed geodata
Computers & Geosciences
A Platform for Service-Oriented Integration of Software Engineering Environments
Proceedings of the 2009 conference on New Trends in Software Methodologies, Tools and Techniques: Proceedings of the Eighth SoMeT_09
Designing WebSphere application server for performance: an evolutionary approach
IBM Systems Journal
Extending web-based applications to incorporate autonomous behavior
Proceedings of the 14th Brazilian Symposium on Multimedia and the Web
Produce and Consume Linked Data with Drupal!
ISWC '09 Proceedings of the 8th International Semantic Web Conference
A Generic Set Theory-Based Pattern Matching Approach for the Analysis of Conceptual Models
ER '09 Proceedings of the 28th International Conference on Conceptual Modeling
Architectural design and analysis of an N-tier enterprise application
EurolMSA '07 Proceedings of the Third IASTED European Conference on Internet and Multimedia Systems and Applications
Electronic Notes in Theoretical Computer Science (ENTCS)
Deriving requirements from process models via the problem frames approach
Information and Software Technology
Combining different multi-tenancy patterns in service-oriented applications
EDOC'09 Proceedings of the 13th IEEE international conference on Enterprise Distributed Object Computing
Rule-based architectural compliance checks for enterprise architecture management
EDOC'09 Proceedings of the 13th IEEE international conference on Enterprise Distributed Object Computing
Two algorithms for architecture pattern recognition
SE '08 Proceedings of the IASTED International Conference on Software Engineering
Building server-side web language processors
Proceedings of the 41st ACM technical symposium on Computer science education
Object-relational mapping with SqueakSave
IWST '09 Proceedings of the International Workshop on Smalltalk Technologies
Simplified infrastructure for the transformation of XML models
Cybernetics and Systems Analysis
Conformance notions for the coordination of interaction components
Science of Computer Programming
Patterns for data and metadata evolution in adaptive object-models
Proceedings of the 15th Conference on Pattern Languages of Programs
Proceedings of the 15th Conference on Pattern Languages of Programs
Thoughts on weak links and Alexandrian life in Scrum
Proceedings of the 15th Conference on Pattern Languages of Programs
Proceedings of the 15th Conference on Pattern Languages of Programs
Distributed design review using tangible augmented technical drawings
Computer-Aided Design
Pattern-based UI design: adding rigor with user and context variables
TAMODIA'06 Proceedings of the 5th international conference on Task models and diagrams for users interface design
XP'03 Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering
Applying service-oriented development to complex systems: BART case study
Proceedings of the 12th Monterey conference on Reliable systems on unreliable networked platforms
Addressing mobile phone diversity in ubicomp experience development
UbiComp '07 Proceedings of the 9th international conference on Ubiquitous computing
Proceedings of the 14th Conference on Pattern Languages of Programs
Checking architectural compliance in component-based systems
Proceedings of the 2010 ACM Symposium on Applied Computing
Differential conversion: DWG - SVG case study
CDVE'07 Proceedings of the 4th international conference on Cooperative design, visualization, and engineering
Industrializing software development: the "factory automation" way
TEAA'06 Proceedings of the 2nd international conference on Trends in enterprise application architecture
TEAA'06 Proceedings of the 2nd international conference on Trends in enterprise application architecture
Reusable architectural decision models for enterprise application development
QoSA'07 Proceedings of the Quality of software architectures 3rd international conference on Software architectures, components, and applications
A functional semantic web architecture
ESWC'08 Proceedings of the 5th European semantic web conference on The semantic web: research and applications
Scalable formalization of publish/subscribe messaging scheme based on message brokers
WS-FM'07 Proceedings of the 4th international conference on Web services and formal methods
Compositional modeling for data-centric business applications
SC'08 Proceedings of the 7th international conference on Software composition
Software engineering group work: personality, patterns and performance
Proceedings of the 2010 Special Interest Group on Management Information System's 48th annual conference on Computer personnel research on Computer personnel research
Is a strategy for code smell assessment long overdue?
Proceedings of the 2010 ICSE Workshop on Emerging Trends in Software Metrics
An approach for developing groupware product lines based on the 3C collaboration model
CRIWG'09 Proceedings of the 15th international conference on Groupware: design, implementation, and use
Using rationale to support pattern-based architectural design
Proceedings of the 2010 ICSE Workshop on Sharing and Reusing Architectural Knowledge
A case for online mixed workload processing
Proceedings of the Third International Workshop on Testing Database Systems
Supporting prenatal care in the public healthcare system in a newly industrialized country
Proceedings of the 9th International Conference on Autonomous Agents and Multiagent Systems: Industry track
Unsupervised matching of object models and ontologies using canonical vocabulary
Proceedings of the 6th International Conference on Semantic Systems
Unifying software architecture with its implementation
Proceedings of the Fourth European Conference on Software Architecture: Companion Volume
Proceedings of the Ergonomie et Informatique Avancee Conference
Editorial: Application integration on the user interface level: An ontology-based approach
Data & Knowledge Engineering
Orthogonal persistence revisited
ICOODB'09 Proceedings of the Second international conference on Object databases
Linking design decisions to design models in model-based software development
ECSA'10 Proceedings of the 4th European conference on Software architecture
Development of a mobile user interface for image-based dietary assessment
Proceedings of the 9th International Conference on Mobile and Ubiquitous Multimedia
A context-aware adaptive learning system using agents
Expert Systems with Applications: An International Journal
Data model driven implementation of web cooperation systems with Tricia
ICOODB'10 Proceedings of the Third international conference on Objects and databases
Application logic patterns reusable elements of user-system interaction
MODELS'10 Proceedings of the 13th international conference on Model driven engineering languages and systems: Part I
TelescopeVisualizer: a real-time internet information visualizer with a flexible user interface
Proceedings of the Sixth Asian Internet Engineering Conference
A categorical framework for the transformation of object-oriented systems: Models and data
Journal of Symbolic Computation
Proceedings of the 16th Conference on Pattern Languages of Programs
Architectural refactoring of a mission critical integration application: a case study
Proceedings of the 4th India Software Engineering Conference
ACACOS'11 Proceedings of the 10th WSEAS international conference on Applied computer and applied computational science
A synergistic model-driven approach for persistence modeling with UML
Journal of Systems and Software
Proceedings of the International Conference on Web Intelligence, Mining and Semantics
Refactoring information systems: association folding and unfolding
ACM SIGSOFT Software Engineering Notes
Design patterns in enterprise application integration for e-learning arena
Proceedings of the 13th International Conference on Humans and Computers
Simulation and optimization of material and energy flow systems
Winter Simulation Conference
Towards a process for architectural modelling in agile software development
Proceedings of the joint ACM SIGSOFT conference -- QoSA and ACM SIGSOFT symposium -- ISARCS on Quality of software architectures -- QoSA and architecting critical systems -- ISARCS
View-based model-driven architecture for enhancing maintainability of data access services
Data & Knowledge Engineering
Contract-based synchronization of IP telecommunication services: a case study
Proceedings of the 5th International Conference on Communication System Software and Middleware
Proceedings of the 15th International Software Product Line Conference, Volume 2
Designing a framework for end user applications
IS-EUD'11 Proceedings of the Third international conference on End-user development
An architecture-centric approach for goal-driven requirements elicitation
Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering
Seuss: better class responsibilities through language-based dependency injection
TOOLS'11 Proceedings of the 49th international conference on Objects, models, components, patterns
Assuring architectural properties during compositional architecture design
SC'11 Proceedings of the 10th international conference on Software composition
MyTravel: a geo-referenced social-oriented web 2.0 application
ICCSA'11 Proceedings of the 2011 international conference on Computational science and its applications - Volume Part I
Wireless Personal Communications: An International Journal
StoRHm: a protocol adapter for mapping SOAP based Web Services to RESTful HTTP format
Electronic Commerce Research
Is there convergence in the field of UI generation?
Journal of Systems and Software
The investigation of WEB software system based on domain-driven design
WISM'11 Proceedings of the 2011 international conference on Web information systems and mining - Volume Part I
A domain specific language for interactive enterprise application development
WISM'11 Proceedings of the 2011 international conference on Web information systems and mining - Volume Part II
Architecture and Patterns for IT Service Management, Resource Planning, and Governance: Making Shoes for the Cobbler's Children: Making Shoes for the Cobbler's Children
Strict serializability is harmless: a new architecture for enterprise applications
Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion
Developing multi-agent system product lines: from requirements to code
International Journal of Agent-Oriented Software Engineering
ICSOC'06 Proceedings of the 4th international conference on Service-Oriented Computing
Automating the product derivation process of multi-agent systems product lines
Journal of Systems and Software
Categorization of concerns: a categorical program comprehension model
Proceedings of the 3rd ACM SIGPLAN workshop on Evaluation and usability of programming languages and tools
Comparing service-oriented and distributed object architectures
OTM'05 Proceedings of the 2005 Confederated international conference on On the Move to Meaningful Internet Systems - Volume >Part I
OTM'05 Proceedings of the 2005 OTM Confederated international conference on On the Move to Meaningful Internet Systems
A methodology to assess the impact of design patterns on software quality
Information and Software Technology
Managing inheritance hierarchies in object/relational mapping tools
CAiSE'05 Proceedings of the 17th international conference on Advanced Information Systems Engineering
Web applications: a simple pluggable architecture for business rich clients
ICWE'05 Proceedings of the 5th international conference on Web Engineering
Business rules segregation for dynamic process management with an aspect-oriented framework
BPM'06 Proceedings of the 2006 international conference on Business Process Management Workshops
Sociopolitical Aspects of Interoperability and Enterprise Architecture in E-Government
Social Science Computer Review
Design patterns and organisational memory in mobile application development
PROFES'05 Proceedings of the 6th international conference on Product Focused Software Process Improvement
Specifying patterns for mobile application domain using general architectural components
PROFES'05 Proceedings of the 6th international conference on Product Focused Software Process Improvement
3d visualisation in spatial data infrastructures
SG'05 Proceedings of the 5th international conference on Smart Graphics
Offline business objects: enabling data persistence for distributed desktop applications
OTM'05 Proceedings of the 2005 OTM Confederated international conference on On the Move to Meaningful Internet Systems: CoopIS, COA, and ODBASE - Volume Part II
MDA approach for maintenance of business applications
ECMDA-FA'06 Proceedings of the Second European conference on Model Driven Architecture: foundations and Applications
An architecture design process using a supportable meta-architecture and roundtrip engineering
ADVIS'06 Proceedings of the 4th international conference on Advances in Information Systems
A framework for integrating natural language tools
PROPOR'06 Proceedings of the 7th international conference on Computational Processing of the Portuguese Language
Process driven data access component generation
DEECS'06 Proceedings of the Second international conference on Data Engineering Issues in E-Commerce and Services
NGITS'06 Proceedings of the 6th international conference on Next Generation Information Technologies and Systems
Requirements for service composition in ultra-large scale software-intensive systems
Monterey'08 Proceedings of the 15th Monterey conference on Foundations of Computer Software: future Trends and Techniques for Development
Efficient session type guided distributed interaction
COORDINATION'10 Proceedings of the 12th international conference on Coordination Models and Languages
Towards amplifying business process reuse
ER'05 Proceedings of the 24th international conference on Perspectives in Conceptual Modeling
Improving object-oriented micro architectural design through knowledge systematization
ER'05 Proceedings of the 24th international conference on Perspectives in Conceptual Modeling
Evaluating integration architectures – a scenario-based evaluation of integration technologies
TEAA'05 Proceedings of the 31st VLDB conference on Trends in Enterprise Application Architecture
Towards an engineering approach to component adaptation
Proceedings of the 2004 international conference on Architecting Systems with Trustworthy Components
Special web-based application for electric circuit analysis
E-ACTIVITIES'11 Proceedings of the 10th WSEAS international conference on E-Activities
Utilizing architectural styles to enhance the adaptation support of middleware platforms
Information and Software Technology
Using spring Roo for the test-driven development of Web applications
Proceedings of the 27th Annual ACM Symposium on Applied Computing
The entity system architecture and its application in an undergraduate game development studio
Proceedings of the International Conference on the Foundations of Digital Games
A bargaining-specific architecture for supporting automated service agreement negotiation systems
Science of Computer Programming
DynamicSchema: a lightweight persistency framework for context-oriented data management
Proceedings of the International Workshop on Context-Oriented Programming
Applying fundamental banking patterns: stories and pattern sequences
Proceedings of the 15th European Conference on Pattern Languages of Programs
Evaluating APIs: a call for design science research
DESRIST'12 Proceedings of the 7th international conference on Design Science Research in Information Systems: advances in theory and practice
Supporting user-centric business processes with WADE
Proceedings of the 11th International Conference on Autonomous Agents and Multiagent Systems - Volume 3
Declarative representation of programming access to ontologies
ESWC'12 Proceedings of the 9th international conference on The Semantic Web: research and applications
A layer-based method for rapid software development
Computers & Mathematics with Applications
Architectural decision identification in architectural patterns
Proceedings of the WICSA/ECSA 2012 Companion Volume
Representing uniqueness constraints in object-relational mapping
TOOLS'12 Proceedings of the 50th international conference on Objects, Models, Components, Patterns
On the automated modularisation of java programs using service locators
SC'12 Proceedings of the 11th international conference on Software Composition
Luar: a language for agile development of NCL templates and documents
Proceedings of the 18th Brazilian symposium on Multimedia and the web
Growing a pattern language (for security)
Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software
Architecture of a multiplatform virtual campus
Software—Practice & Experience
CMMI based software metrics to evaluate OOAD
Proceedings of the Second International Conference on Computational Science, Engineering and Information Technology
Finding the pattern you need: the design pattern intent ontology
MODELS'07 Proceedings of the 10th international conference on Model Driven Engineering Languages and Systems
Non-null references by default in java: alleviating the nullity annotation burden
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
Science of Computer Programming
Satisfying agent goals by executing different task semantics: HTN, OWL-S or plug one yourself
Autonomous Agents and Multi-Agent Systems
Using Simulation for Enhanced Accounting Learning: A Case Study
International Journal of Distance Education Technologies
Practical experiences in modelling software engineering practices: The project patterns approach
Software Quality Control
On the appropriate rationale for using design patterns and pattern documentation
Proceedings of the 9th international ACM Sigsoft conference on Quality of software architectures
Pattern Language Verification in Model Driven Design
Information Sciences: an International Journal
On the existence of high-impact refactoring opportunities in programs
ACSC '12 Proceedings of the Thirty-fifth Australasian Computer Science Conference - Volume 122
A concept for generating simplified RESTful interfaces
Proceedings of the 22nd international conference on World Wide Web companion
Mining behavior models from enterprise web applications
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
ACM Transactions on Software Engineering and Methodology (TOSEM) - In memoriam, fault detection and localization, formal methods, modeling and design
Architectural patterns for metadata-based frameworks usage
Proceedings of the 17th Conference on Pattern Languages of Programs
Proceedings of the 17th Conference on Pattern Languages of Programs
Ultimate architecture enforcement: custom checks enforced at code-commit time
Proceedings of the 2013 companion publication for conference on Systems, programming, & applications: software for humanity
Design principles for research data export: lessons learned in e-health design research
DESRIST'13 Proceedings of the 8th international conference on Design Science at the Intersection of Physical and Virtual Design
Answer set programming: language, applications and development tools
RR'13 Proceedings of the 7th international conference on Web Reasoning and Rule Systems
Data & Knowledge Engineering
Method supporting collaboration in complex system participatory simulation
Proceedings of the Fourth Symposium on Information and Communication Technology
Hi-index | 0.00 |
From the Book:In the spring of 1999 I flew to Chicago to consult on a project being done by ThoughtWorks, a small but rapidly growing application development company. The project was one of those ambitious enterprise application projects: a back-end leasing system. Essentially what this system does is to deal with everything that happens to a lease after you've signed on the dotted line. It has to deal with sending out bills, handling someone upgrading one of the assets on the lease, chasing people who don't pay their bills on time, and figuring out what happens when someone returns the assets early. That doesn't sound too bad until you realize that leasing agreements are infinitely varied and horrendously complicated. The business "logic" rarely fits any logical pattern, because after all its written by business people to capture business, where odd small variations can make all the difference in winning a deal. Each of those little victories is yet more complexity to the system. That's the kind of thing that gets me excited: how to take all that complexity and come up with system of objects that can make more tractable. Indeed I belive that the primary benefit of objects is in making complex logic tractable. Developing a good Domain Model (133) for a complex business problem is difficult, but wonderfully satisfying. Yet that's not the end of the problem. Such a domain model has to persisted to a database, and like many projects we were using a relational database. We also had to connect this model to a user interface, provide support to allow remote applications to use our software, and integrate our software with third party packages. All of this on a newtechnology called J2EE which nobody in the world had any real experience in using. Even though this technology was new, we did have the benefit of experience. I'd been doing this kind of thing for ages now with C++, Smalltalk, and CORBA. Many of the ThoughtWorkers had a lot of experience with Forte. We already had the key architectural ideas in our heads, we just had to figure out how to apply them to J2EE. Looking back on it three years later the design is not perfect, but it's stood the test of time pretty damn well. That's the kind of situation that is where this book comes in. Over the years I've seen many enterprise application projects. These projects often contain similar design ideas which have proven to be effective ways to deal with the inevitable complexity that enterprise applications possess. This book is a starting point to capture these design ideas as patterns. The book is organized in two parts. The first part is a set of narrative chapters on a number of important topics in the design of enterprise applications. They introduce various problems in the architecture of enterprise applications and their solutions. However the narrative chapters don't go into much detail on these solutions. The details of the solutions are in the second part, organized as patterns. These patterns are a reference and I don't expect you to read them cover to cover. My intention is that you can read the narrative chapters in part one from start to finish to get a broad picture of what the book covers, then you can dip into the patterns chapters of part two as your interest and needs drive you. So this book is a short narrative book and a longer reference book combined into one. This is a book on enterprise application design. Enterprise applications are about the display, manipulation and storage of large amounts of often complex data and the support or automation of business processes with that data. Examples include reservation systems, financial systems, supply chain systems, and many of the systems that run modern business. Enterprise applications have their own particular challenges and solutions. They are a different animal to embedded systems, control systems, telecoms, or desktop productivity software. So if you work in of these other fields, there's nothing really in this book for you (unless you want to get a feel for what enterprise applications are like.) For a general book on software architecture I'd recommend POSA. There are many architectural issues in building enterprise applications. I'm afraid this book can't be a comprehensive guide to them. In building software I'm a great believer in iterative development. At the heart of iterative development is the notion that you should deliver software as soon as you have something useful to the user, even if it's not complete. Although there are many differences between writing a book and writing software, this notion is one that I think the two share. So this book is an incomplete but (I trust) useful compendium of advice on enterprise application architecture. The primary topics I talk about are: layering of enterprise applications how to structure domain (business) logic the structure of a web user interface how to link in-memory modules (particularly objects) to a relational database how to handle session state in stateless environments some principles of distributionThe list of things I don't talk about is rather longer. I really fancied writing about organizing validation, incorporating messaging and asynchronous communication, security, error handling, clustering, application integration, architectural refactoring, structuring rich-client user interfaces, amongst others. I can only hope to see some patterns appear for this work in the near future. However due to space, time, and lack of cogitation you won't find them in this book. Perhaps I'll do a second volume someday and get into these topics, or maybe someone else will fill these, and other, gaps. Of these, dealing with message based communication is a particularly big issue. Increasingly people who are integrating multiple applications are making use of asynchronous message based communication approaches. There's much to said for using them within an application as well. This book is not intended to be specific for any particular software platform. I first came across these patterns while working with Smalltalk, C++, and CORBA in the late 80's and early 90's. In the late 90's I started to do extensive work in Java and found these patterns applied well both to early Java/CORBA systems and later J2EE based work. More recently I've been doing some initial work with Microsoft's .NET platform and find the patterns apply again. My ThoughtWorks colleagues have also introduced their experiences, particularly with Forte. I can't claim generality across all platforms that ever have been or will be used for enterprise applications, but so far these patterns have shown enough recurrence to be useful. I have provided code exampl for most of these patterns. My choice of language for the code examples is based on what I think most readers are likely to be able to read and understand. Java's a good choice here. Anyone who can read C or C++ can read Java, yet Java is much less complex than C++. Essentially most C++ programmers can read Java but not vice versa. I'm an object bigot, so inevitably lean to an OO language. As a result most of the code examples are in Java. As I was working on the book Microsoft started stabilizing their .NET environment, and their C# language has most of the same properties as Java for an author. So I did some of the code examples in C# as well, although that does introduce some risk since developers don't have much experience with .NET yet and so the idioms for using it well are less mature. Both are C-based languages so if you can read one you should be able to read both, even if you aren't deeply into that language or platform. My aim was to use a language that the largest amount of software developers can read, even if it's not their primary or preferred language. (My apologies to those who like Smalltalk, Delphi, Visual Basic, Perl, Python, Ruby, COBOL or any other language. I know you think you know a better language than Java or C#, all I can say is I do too!) The examples are there for inspiration and explanation of the ideas in the patterns. They are not canned solutions, in all cases you'll need to do a fair bit of work to fit them into your application. Patterns are useful starting points, but they are not destinations. Who This book Is ForI've written this book for programmers, designers, and architects who are building enterprise applications and who want to either improve their understanding of these architectural issues or improve their communication about them. I'm assuming that most of my readers will fall into two groups: either those with modest needs who are looking to build their own software to handle these issues, or readers with more demanding needs who will be using a tool. For those of modest needs, my intention is that these patters should get you started. In many areas you'll need more than the patterns will give you, but my intention is to provide more of a head start in this field than I got. For tool users I hope this book will be useful to give you some idea of what's happening under the hood, but also help you in making choices between which of the tool supported patterns to use. Using, say, an object-relational mapping tool still means you have to make decisions about how to map certain situations. Reading the patterns should give you some guidance in making the choices. There is a third category, those with demanding needs who want to build their own software for these problems. The first thing I'd say here is look carefully at using tools. I've seen more than one project get sucked into a long exercise at building frameworks which weren't what project was really about. If you're still convinced, go ahead. Remember in this case that many of the code examples in this book are deliberately simplified to help understanding, and you'll find you'll need to do a lot tweaking to handle the greater demands that you'll face. Since patterns are common solutions to recurring problems, there's a good chance that you'll have already come across some of them. If you've been working in enterprise applicat while, you may well know most of them. I'm not claiming to have anything new in this book. Indeed I claim the oppositethis is a book of (for our industry) old ideas. If you're new to this field I hope you'll like this book to help you learn about these techniques. If you're more familiar with the techniques I hope you'll like this book because it helps you communicate and teach these ideas to others. An important part of patterns is trying to build a common vocabulary, so you can say that this class is a Remote Facade (413) and other designers know what you mean. Martin Fowler, Melrose MA, May 2002 http://martinfowler.com