Nothing But .NET, Calgary 2007 - Day 2
The second day was as good as the first, with a tiny exception for configuration of CruiseControl.NET - IMO, technique is valuable, not the technical details. Specification technique was bright, logging exercise was a healthy one. Learned to differentiate between state testing andA0 interaction testing, but I am not completely set on it. Here are the notes taken through out the day 2:
09:00
-
http://codekata.pragprog.com
- Build process and not compilation in vs.net: speed;
logging; testing;
- Spike new stuff, do not have a
deep understanding, until you have to have it in your
project
- "Use the tool knowing you can produce the
same result without the tool." - J. Nielson
-
"Speaking and writting is not an elite club - be honest and
be good in what you do." - JP
- Plan success for
yourself for a short/long periods of time.
- It
doesn't matter what you do as you do it the best.
-
IEnumerable<T> is a gateway to get an
Iterator<T>
10:00
- "Introduce Local
Extension" refactoring technique - exampe: IRichList and
RichList
- Refactoring book - re-read
-
Decorator has exactly the same interface as the object it
decorates (intent: add functionality without changing the
public interface)
- Client - dont care about what
Decorator does. With "Local Extension" you care about
implementation
- Extension methods in .Net 3.5 will
introduce a form of a code reuse that can quickly become a
code abuse
- IComparer<T> --> Strategy
implementation for comparng in .Net
- R# CTRL-N *Pub
will find all classes with "Pub" in it
- one ONE 1
return per method - old and good school
11:00
-
Proxy = secured composing mechanism
- Use the best
tools for the right tasks (me:)
- Aggregate - boundry
of protection (library and it's books)
- Composite -
complex structure - the root and the leaf are of the same
interface and the difference is that some operations on
leafs might not do what the do on root or oppositeA0 (with
Iterators and Visitors, with Command)
- Think Domain
Driven, not Data Driven
11:30 Querying
[Q] How
to do TDD with WebControls?
- function that return
function -> return a new delegate
11:50
Specifications
// TODO: implement ISpecification for
IEntityCollection
- Specifications create a tree of objects, that can be
translated into a query for DB or any other repository
- LINQ: abstruction the details of how the provider
takes the expression and converts into query
scoop:
"Nothing But *" sessions will be coming soon with different
well known people
13:25
- FW
harvesting: design solution for the client and pull out
pieces for the FW to be reused
- FW should be
harvested from the real life projects and not built in
isolation
14:00 DB
- Developers
should have local DB to speed development and not to delay
the rest of the team while testing/developing
- File
Unlocker -
http://ccollomb.free.fr/unlocker/
- Windows Task Switcher -
http://ccollomb.free.fr/unlocker/
- MyUninstaller utility - keyboard friendly
-
Console - tabbed console
- QueryExpress - sql server
management studio alternative
A joke that CJ told: "I
had a problem i wanted to solve with regex. Now I have 2
problems to solve."
15:37 Continuous Integration (WebApp)
- Test has A)Unit (test) B)Integration (test)
-
Aspect# (Castle, AOP)
15:50 Mocked Testing
- Mocked testing is an interaction testing
-
RhinoMocks framework
- using (mockery.Record()){}
- using (mockery.Playback()){}
17:30 Testing
- State Base vs. Interaction Based (mocked) testing
- Component partitioning - separating interfaces from
implementors for separate packaging
- examples: Log
class is a static gateway
19:00 CruiseControl.NET
- a front controller implementation that allows
dashboard configuration through xsl files
- CI =
Compilation, Unit testing, Code Coverage, FxCop, Versioning,
Reporting, Publishing
- a role of a build-manager
cycles through the iteration to spread the knowledge and
know how to do that
- development cycle should be
short (around 15 minutes) so when you commit the changes the
amount of collisions when merging would be minimal
21:45 --- END OF ITERATION 0 ---A0
22:30
EOM