Thinking DDD with Patterns - Part 2 -

In previous post, I described the architecture diagram of our project. In this post I will describe the architecture layers. As shown in the architecture diagram, our layers are based on the approach DDD (UI, Application, Domain and Infrastructure).

  1. User Interface (Presentation Layer): Responsible for presenting information to the user and interpreting user commands. As shown in the diagram above, this layer can be represented by one of the following interfaces:
    • Silverlight or WPF: In this part, you should use the pattern MVVM (Model-View-ViewModel). MVVM offers a flexible way to create applications Silverlight / WPF and allow to reusing of code, simplifying maintenance and testing. It is composed of :
      • View: XAML for WPF or silverlight screens
      • ViewModel: relation between the view and model
      • Model: represents the entities and the business code on the server side.

     

    • ASP.NET MVC: As its name implies, the pattern used here is the MVC (Model-View-Controller).
      • Controller: Allows you to manage user interaction, working with the model and, finally, select the view that will allow rendering the user interface.
      • View: display made ​​in ASP engine or Razor
      • Model: represents the entities and the business code on the server side.

     

    • ASP.NET Webform: It doesn't follow any pattern. It is the strong coupling between the view and the code behind. Additional work is needed from the entire team to reduce the maximum possible code behind.


       

  2. Application layer: This is a thin layer which coordinates the application activity. It doesn't contain business logic. It doesn't hold the state of the business objects, but it can hold the state of an application task progress..
  3. Domain layer: This layer contains the information about the domain. This is the heart of business software. The state of business objects is held here. Persistence of business objects and possibly their state is delegated to the infrastructure layer.
  4. Infrastructure Layer: This layer acts as a supporting library for all the other layers. It provides communication between layers, implements the persistence of business objects contains supporting libraries for UI layer.

Other than main layers, I added two needed libraries:

  • WCF service: exposes the necessary contracts for the UI layer.
  • UTILS: It is a utility containing common code for any generic solution.

In next post, I will describe components used and how to create our project with VS 2010…

Thinking DDD with Patterns - Part 1 -

In this post, I will describe how to create a project using DDD approach and few patterns such as MVVM, MVC and IoC. In future posts, I will describe how create other projects using CQRS (DDDD) architecture.

Our project is a simply scrum tool. For those who are new to Scrum, "Scrum in FiveMinutes - Executive Summary" serves as a canon useful introduction. The project is to manage Scrum Task Board. To understand the needs of the project, I invite you to take a look at this link. The project objective is not to replace cork board hung on the wall. It is rather to keep a copy of the daily scrum progress.

Starting by describe global architecture project :

Our architecture is based on the Domain Driven Design approach. DDD is an approach to software development for complex needs. Firstly, DDD does not a new concept: it is neither a method nor a technology. The Domain Driven Design is "thinking". It is a set of "best practices" to reconcile art and technology in the software design.

Indeed, in the DDD, the business (Domain) that will not drive but inspire development. The main concept of DDD is that, whatever the implementation, it must reflect the business (Customer Requirements).

รจ"It should be possible to read the code, understand the business".

In next post, I will describe the architecture layers…

MongoDB vs CouchDB vs MySQL

Here is a simple comparison between NoSQL ( MongoDB, CouchDB) and RDBMS (MySQL) :

  

MongoDB

CouchDB

MySQL

Data Model 

Document-Oriented

Document-Oriented

Relational

Licence 

AGPL

Apache

GPL 

Large Objects (Files) 

Yes (GridFS)

Yes (attachments)

blobs 

Replication 

Master-slave

Master-master

Master-slave 

Object(row) Storage 

Collection based

One large repository

Table based

Query Language 

Dynamic; object-based

http

Dynamic; SQL

Full Text Search 

No

No 

Yes 

Unicode 

Yes

Yes 

Yes 

Map and Reduce 

Yes

Yes

Yes

Secondary Indexes 

Yes

Yes 

Yes 

Atomicity 

Single document

Single document

Yes - advanced

Interface 

Native drivers ; REST add-on

REST

Native drivers

Written in 

C++

Erlang

C++

Concurrency Control 

Update in Place

MVCC 

 

Geospatial Indexes 

Yes

GeoCouch

?

Transactions

No

Yes

Yes

Referential integrity

No

No

Yes

Distributed Consistency Model

Strong consistency.

Eventually consistent

Strong consistency.

Sharding

Yes

No

No

Horizontal scalable 

Yes

Yes

No

Debugging and Making a Service Available Across Domain Boundaries in Silverlight Application

If you encounter this kind of an error message:

“An error occurred while trying to make a request to URI ‘http://localhost...’. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. Please see the inner exception for more details“

You need to check for Cross-Domain Issues as follows :

If the domain of the application URL is different from the domain of the service URL, you have a cross-domain situation. Access of a service across domains requires that the service have a cross-domain policy file. There are two kinds of cross-domain policy files: Clientaccesspolicy.xml and Crossdomain.xml.

1. ClientAccessPolicy.xml file: This file is defined by Silverlight. It can be used only granting access to Silverlight applications, however this file provides more granular control over allowed domains. . If you want to use this file you should create a clientaccesspolicy.xml file that allows access to the service and save it to the root of the domain where the service is hosted. The following configuration allows access from any other domain to all resources on the current domain.


  
    
      
        
      
      
        
      
    
  



2. Crossdomain.xml File: This file is defined by Adobe Flash. It can be used if you want your service to grant access to both Adobe and Silverlight application. If you want to use this file you should create a crossdomain.xml file that contains the following configuration and save it to the root of the domain where the service is hosted. The file must be configured to allow access to the service from any other domain, or it is not recognized by Silverlight 4.




  

How to get a MouseLeftButtonDown or MouseLeftButtonUp Event from TextBox in Silverlight ?

In Silverlight, the event leftclickbutton for textbox control does not work. to solve this problem, simply create the following class:
namespace Utils
{
    public class TextBoxClickable : TextBox
    {
        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonDown(e);
            e.Handled = !base.Focus();
        }
        protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonUp(e);
            e.Handled = !base.Focus();
        }
    }
}

Your XAML should define your namespace:

And you can use your new clickable TextBox like this: