<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Bill Gibson's Blog : Modeling</title><link>http://blogs.msdn.com/billgibson/archive/tags/Modeling/default.aspx</link><description>Tags: Modeling</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Oslo CTP update; Data Modeling Design Patterns in M</title><link>http://blogs.msdn.com/billgibson/archive/2009/01/28/modeling-patterns.aspx</link><pubDate>Thu, 29 Jan 2009 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9381956</guid><dc:creator>Bill Gibson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/billgibson/comments/9381956.aspx</comments><wfw:commentRss>http://blogs.msdn.com/billgibson/commentrss.aspx?PostID=9381956</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;As modelers, one of the things we're doing all the time is&amp;nbsp;looking for patterns - trying to distinguish what in each model is truly unique to the domain from that which is more broadly applicable, and then either using&amp;nbsp;or adapting existing patterns or harvesting new patterns to put in our back pocket.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;T&lt;/SPAN&gt;he January Oslo&amp;nbsp;CTP update (&lt;EM&gt;&lt;STRONG&gt;woohoo!!&lt;/STRONG&gt;)&lt;/EM&gt;&amp;nbsp;on the &lt;A href="http://msdn.microsoft.com/en-us/oslo/default.aspx" mce_href="http://msdn.microsoft.com/en-us/oslo/default.aspx"&gt;Oslo Dev Center&lt;/A&gt; includes an initial set of &lt;A href="http://msdn.microsoft.com/en-us/library/dd326765.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd326765.aspx"&gt;data modeling design patterns&lt;/A&gt;.&amp;nbsp; These patterns, described and illustrated in M, include patterns for modeling&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt;enumerations and relationships, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;including closed type-based enumerations, open extent-based enumerations, and&amp;nbsp;one-to-many, many-to-many and one-to-one relationships.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;While this may seem like pretty basic stuff&amp;nbsp;you'll likely find some or all of it useful, particularly if you're new to M and coming at&amp;nbsp;it and repository modeling with an OO rather than relational mindset.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The patterns&amp;nbsp;all have code samples so you may find it&amp;nbsp;useful to have the patterns open&amp;nbsp;while you're coding.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;We'll add &lt;/SPAN&gt;more&amp;nbsp;patterns as&amp;nbsp;our experience grows and the language evolves and is more fully implemented.&amp;nbsp; In&amp;nbsp;the pipeline are patterns for vertical partitioning, including patterns that help when mapping a generalization hierarchy&amp;nbsp;in a conceptual model to a relational&amp;nbsp;design.&amp;nbsp;&amp;nbsp; You can see some early exploration of these kinds of patterns in the domain schemas included in the CTP.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;As always, we'd love to get your&amp;nbsp;feedback.&amp;nbsp; If you have any comments on the patterns and the usefulness of this kind of material let us know.&amp;nbsp; And if you have any broadly useful patterns&amp;nbsp;in your back pocket&amp;nbsp;that&amp;nbsp;might map nicely into M they would be great to hear about also.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9381956" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/billgibson/archive/tags/Modeling/default.aspx">Modeling</category><category domain="http://blogs.msdn.com/billgibson/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/billgibson/archive/tags/Patterns/default.aspx">Patterns</category></item><item><title>Domain Modeling</title><link>http://blogs.msdn.com/billgibson/archive/2009/01/27/domain-modeling.aspx</link><pubDate>Wed, 28 Jan 2009 07:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9379728</guid><dc:creator>Bill Gibson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/billgibson/comments/9379728.aspx</comments><wfw:commentRss>http://blogs.msdn.com/billgibson/commentrss.aspx?PostID=9379728</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;My focus within the Olso team&amp;nbsp;is on &lt;STRONG&gt;&lt;EM&gt;domain modeling&lt;/EM&gt;&lt;/STRONG&gt; – creating models for specific problem domains using the Oslo modeling platform’s languages and tools.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; Let me describe&amp;nbsp;why we think of this as more than just data modeling.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;At the center of an Oslo&amp;nbsp;domain &lt;EM&gt;is&lt;/EM&gt; a data model authored in M.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;The &lt;/SPAN&gt;primary purpose of this model or schema is to describe repository storage, defined in terms of &lt;EM&gt;extents.&amp;nbsp;&lt;/EM&gt;This domain schema defines data integrity constraints and may also define&amp;nbsp;reusable data definitions or &lt;EM&gt;types&lt;/EM&gt;, as well as&amp;nbsp;&lt;EM&gt;computed values&lt;/EM&gt; that describe interesting ways to retrieve and compute data from the model.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; The schema&amp;nbsp;is compiled into SQL, resulting in tables, views, constraints&amp;nbsp;and functions which are loaded into a SQL Server database primed with some simple Repository patterns.&amp;nbsp; The result is a simple and easy-to-query and otherwise normal SQL database, which can be queried using&amp;nbsp;any SQL data access API or tools.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;Surrounding this data model and considered part of the domain may be any number of domain specific languages, which if developed using Oslo may be textual, authored in MGrammar, or visual, authored with Quadrant.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These DSLs define ways in which domain information (instance data) can be created or presented.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Any number of textual&amp;nbsp;and visual languages may be defined for the same domain, each customized to provide some specific perspective.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;A domain can also reference other domains, so models and languages may also reference (and in due course, embed) other models and languages.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Accompanying each&amp;nbsp;DSL may be utilities that map or import/export language 'documents'&amp;nbsp;to and from repository storage.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; For textual DSLs described in MGrammar s&lt;/SPAN&gt;imple transformations can be expressed in the grammar itself - more complex transformations need to be&amp;nbsp;described separately.&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;A key Oslo scenario will involve cataloging and potentially creating/editing pre-defined artifacts that might otherwise be created and/or consumed externally by other tools.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Collectively, the domain schema, textual and visual&amp;nbsp;DSLs, and their accompanying&amp;nbsp;import/export tools&amp;nbsp;define what we think of as a domain from an Oslo standpoint and will typically be&amp;nbsp;evolved as a unit.&amp;nbsp; This&amp;nbsp;whole-domain perspective is an important part of the way we think about modeling with Oslo and&amp;nbsp;strongly influences how you can expect the Oslo&amp;nbsp;platform to be developed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;You can see some early examples of domain schemas included with the CTP on the &lt;A href="http://msdn.microsoft.com/en-us/oslo/default.aspx" mce_href="http://msdn.microsoft.com/en-us/oslo/default.aspx"&gt;Oslo Dev Center&lt;/A&gt;.&amp;nbsp; Take a look if you can.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Next up, data modeling design patterns in M...&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9379728" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/billgibson/archive/tags/Modeling/default.aspx">Modeling</category><category domain="http://blogs.msdn.com/billgibson/archive/tags/Oslo/default.aspx">Oslo</category></item><item><title>Logical vs. Physical Architectural Modeling Concerns</title><link>http://blogs.msdn.com/billgibson/archive/2005/11/11/logical-vs-physical-architectural-modeling-concerns.aspx</link><pubDate>Fri, 11 Nov 2005 20:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:491857</guid><dc:creator>Bill Gibson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/billgibson/comments/491857.aspx</comments><wfw:commentRss>http://blogs.msdn.com/billgibson/commentrss.aspx?PostID=491857</wfw:commentRss><description>&lt;P&gt;We've been having hallway discussions about some of the dimensions of modeling application architectures.&amp;nbsp; SDM adopts a&amp;nbsp;particularly physical perspective, as it focuses on the deployment packaging stack of concerns.&amp;nbsp; Its focus is on resources (things like assemblies, config, XML files&amp;nbsp;etc.) that are composed into independently deployable applications, that are composed into systems, which are then&amp;nbsp;composed into still higher level systems.&amp;nbsp; SDM, does allow you focus on tangible software entities and express their behavior - very CBD-like.&amp;nbsp; But of course there are other&amp;nbsp;perspectives, and particularly troublesome to some is the absence in the current designers of a logical perspective, in which you can define what an application does, independently of describing how it does it or&amp;nbsp;how that implementation is packaged.&amp;nbsp; The discussion turned to the role of namespace in that logical perspective, specifically to the question, are namespaces the&amp;nbsp;primary logical organizing perspective.&amp;nbsp;I wrote some comments in an email on the subject and have elaborated on them here and invite comment. &lt;/P&gt;
&lt;P&gt;While namespaces are clearly not a packaging&amp;nbsp;concept as they can cut across assemblies, they are not necessarily the best or only way to organize the elements in a logical architecture. &amp;nbsp;Instead&amp;nbsp;the notion of a cross-cutting and entirely logical organization of function is proposed.&amp;nbsp; The term "module" was suggested some months ago by a colleagure for this notion.&amp;nbsp;&amp;nbsp;Thus a&amp;nbsp;module is an arbitrary collection of function.&amp;nbsp; A module could be a collection of methods, one class, many classes; may be coincident with an assembly, cross assemblies or contain assemblies.&amp;nbsp; Modules can also&amp;nbsp;describe data.&amp;nbsp;Early on in your design, you might think about modules but go no further than&amp;nbsp;giving a&amp;nbsp;name and describing the role. &amp;nbsp;A classic block structure architecture diagram might be used to show the way modules interact, either depicting a specific instance of an architecture or a pattern before any details exist of the behavior of each module.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;You might assign namespaces to modules – although the naming of types/classes, while important, is not intriniscally linked to the logical structuring of software.&amp;nbsp; Namespaces&amp;nbsp;might reflect the logical structure and you might be tempted to conflate the two, such that you use namespaces when really you&amp;nbsp;arethinking about modules.&amp;nbsp; At some point in your design process as you refine your module designs and start to define classes, creating&amp;nbsp;namespaces will become important.&amp;nbsp; And at some point in your design packaging considerations will become important, when you will specify applications, frameworks, and systems.&amp;nbsp; With your packaging decisions you harden the partitioning of the functions in your modules and make&amp;nbsp;communication and binding decisions.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Thus there are module, namespace and packaging dimensions, These represent orthogonal but related concerns which inform each other.&amp;nbsp; Different design strategies will have you tackle these aspects: physical structure (systems, applications, frameworks), logical structure (modules) and implementation (classes with namespaces) in different amounts at different times – being able to reason about all three as and when you choose will be the most flexible and should be what we aim for in tools.&amp;nbsp; Associating a namespace with a module or even a package may make good sense when the purpose of the module/package and the goals of the namespace align but the two are not intrinsically linked.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=491857" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/billgibson/archive/tags/Modeling/default.aspx">Modeling</category></item><item><title>Understanding SDM: Systems and the Four Layer Model</title><link>http://blogs.msdn.com/billgibson/archive/2005/10/16/understanding-sdm-systems-and-the-four-layer-model.aspx</link><pubDate>Sun, 16 Oct 2005 19:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:481591</guid><dc:creator>Bill Gibson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/billgibson/comments/481591.aspx</comments><wfw:commentRss>http://blogs.msdn.com/billgibson/commentrss.aspx?PostID=481591</wfw:commentRss><description>&lt;P&gt;The Whitehorse Distributed System Designers are based on SDM - the System Definition Model.&amp;nbsp; SDM offers a simple model for representing computer systems that can help in many parts of the design, deployment and management space.&amp;nbsp; I'll try over an occasional&amp;nbsp;series of posts to introduce some of the key SDM concepts and how they play together.&amp;nbsp; I'll also show how we can&amp;nbsp;extend these to do some neat things in the application architecture modeling space.&lt;/P&gt;
&lt;P&gt;At the heart of SDM is the notion of a 'system'.&amp;nbsp; Let's look at a definition of system that I find useful.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;EM&gt;A system is a configurable collection of resources that can be independently deployed .&amp;nbsp; If the resources in a system need to access resources of another system they do so by communicating via endpoints on the systems.&amp;nbsp; &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;A system can be atomic&amp;nbsp;or composite; a composite system is composed of other systems.&amp;nbsp;I'll explore&amp;nbsp;system composition, resources and endpoints further in other posts,&amp;nbsp;this post will focus on&amp;nbsp;the notion of system hosting. &lt;/P&gt;
&lt;P&gt;One system is considered to host another system if it provides&amp;nbsp;infrastructural services to the hosted system.&amp;nbsp; Services can be thought of as infrastructural if the services are provided to many systems of the same type.&amp;nbsp; Introducing the hosting relationship&amp;nbsp;allows the model to be layered, so that different concerns can be addressed in different layers.&amp;nbsp; For example, the requirement of an ASP.NET application on the services provided by IIS is an infrastructural hosting relationship.&amp;nbsp;&amp;nbsp;Similarly IIS is hosted on Windows which in turn is hosted on an appropriate physical system.&amp;nbsp; It wouldn't be useful to have to include models of&amp;nbsp;IIS and Windows and all the other systems that exist in those layers&amp;nbsp;every time you wanted to model an application so we model those separately and then host a model at one level on the model of another.&amp;nbsp;This reflects the reality that one tends to think of configuring standard system 'platforms' on which&amp;nbsp;other systems&amp;nbsp;are installed.&amp;nbsp;&amp;nbsp;Most organizations use a small number of standard configurations&amp;nbsp;of hardware systems on which they install standard configurations of OS and networking systems on which they run standard configurations of application hosting systems on which they run standard configurations of their business applications.&lt;/P&gt;
&lt;P&gt;We typically think about there being four layers of systems: application systems, application hosting systems (such as IIS, SQL Server), operating and network systems (such as Windows), and hardware systems (such as a Dell or HP server, Cisco router etc.).&amp;nbsp; In reality there are no hard boundaries and there may well be more than four layers of interest, but it is often useful to think about these four general categories of systems, and it certainly helps people 'get' the overall model.&lt;/P&gt;
&lt;P&gt;Different roles/people at different stages are interested in defining, deploying and managing each of the layers.&amp;nbsp; Information about one layer can be provided to those involved in defining another layer to assist in validating that systems at one level will successfully deploy on&amp;nbsp;a specific configuration of systems at the next level.&amp;nbsp; The Distributed System Designers, for example, support the definition of models of the application layer and the application hosting layer and enable deployment validation - where the configuration of an application is verified against a&amp;nbsp;configuration of application hosting software with the goal of increasing the likelihood of successfully deploying the application.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=481591" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/billgibson/archive/tags/Whitehorse/default.aspx">Whitehorse</category><category domain="http://blogs.msdn.com/billgibson/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/billgibson/archive/tags/Modeling/default.aspx">Modeling</category></item></channel></rss>