DDD & TDD. part II

Disposition

So we have domain classes with minimal set of properties and methods. Also we have several tests on these classes. The goal is to learn how deal with domain classes – i.e. write services which will do complex calculations and modifications. For example count students in selected course.

Domain services

Assume that one of the tasks is count classes for selected course and how many students in them.

Let’s think which domain classes known about each other:

  • “School” knows how many “Class”es it contains.
  • “Class” knows how many students it contains.

I think it will be enough for now. What is the easiest way that will implement most of novice? Add to “School” method:

public int CountStudent(int classNumber) { … }

But it is a bad idea because of next reasons:

  • It leads to growing responsibilities of “School” class and the result is coupling;
  • Became harder to maintain and change “School”;
  • Also can appear issues for test writing.

Continue reading

DDD & TDD. part I

Disclaimer

Article is a simple presentation of DDD and TDD in order to show how to deal with it and give an opportunity to start development according describing techniques. Those who already practice TDD and DDD,  please don’t be strict to words.

Magic abbreviations

DDD – Domain Driven Design, in few words it is a solution code manner. And your target is an extract main application logic, the core, in a separate independent module. Domain must be independent from specific technologies, it won’t relay on underlying data, graphical presentation and so on.

TDD – Test Driven Design, developing application by tests. “Test become before code”.

Both of these practices (maybe better to call it philosophy) come together in my projects and, to be honest, for me it’s hard to imagine their usage separately. But yes, you can use them absolutely separate and no one oblige you to apply them in every project together.

There is a dozen of books, articles and other stuff in any format and size. Somewhere it is simpler, somewhere with more complex vision. I wouldn’t like  to make a  historical excursion how DDD and TDD have been invented, because it’s easy to find out in web, to  google Eric Evance books or visit Martin Fowler site. I’d like to share my vision of subject in simple words. Tell how it helps, works, evolves and supports. I hope I can achieve the goal.

Okay, let’s take a closer tour by these techniques.

Continue reading

Custom controls

What for?

During everyday work I create a dozen of custom control.  Formally, every “User Control” is a custom control. I create a specific layout from standard controls and use it in a program. I don’t think about them as about “real custom control”, because they are useful only for me in my very particular application. In the most common cases I don’t reuse them at all out of application scope. But from time to time I discover that some of them are good for common usage.

Sometimes I find good examples of controls from other systems or chargeable control kit. If one man make something, other one could make it also. =) By the way it’s a great challenge.

When I get know a smart tag closer, I’d decided that some of controls can be extended. It’s just like using extension methods to create DSL, helping classes and so on to write faster and easier. The same story with controls.

So there are several reasons why a custom control appears:

  • Occasionally – as a result of everyday work;
  • Extracted same parts from occasional controls;
  • Planned as a new control from the very beginning;
  • As an extension of exists control.

Continue reading

How to install custom controls

After creating some stuff, you’d like to use it from time to time in a different project. How to install it on VS Toolbar, add to “Add reference…” dialog and how to avoid underwater rocks – all this will be uncovered on next few pages.

Prepare assembly

When you have project with tuned custom controls and you feel fine how they works and looks like – you probably automate install actions. What you have to do to install controls:

  1. Add sign to assembly;
  2. Install assembly to GAC;
  3. Add to Visual Studio “Add reference…” dialog;
  4. Add to Visual Studio Toolbar.

I’m going to show you how to do almost all of this numbers programmatically in code snippets. Assume that control’s library called myCustomControl.dll. It’s up to you how to combine them for nice looking application. ;)

Continue reading

Smart tag – Single Binding

Intro

I’d like to continue describing how to create a smart tag. Previously I wrote what is smart tag and how to create it. In this post I’d like to tell how to create binding for the single field.

I assume that you have already created a custom user control, apply designer attribute and ready for to go ahead. As in the previous post I strongly advise to use ReSharper.

I’m going to show you how to create a similar functionality for your control’s smart tag as at Property view

Implementing this you can save a lot of time that was spent on browsing Property view in order to setup appearance and behavior.

Continue reading