TDD is BS?

Regan Heath regan at netmail.co.nz
Wed Jun 19 09:06:40 PDT 2013


On Wed, 19 Jun 2013 16:34:03 +0100, Szymon Gatner <noemail at gmail.com>  
wrote:

> On Wednesday, 19 June 2013 at 14:04:35 UTC, Regan Heath wrote:
>> On Wed, 19 Jun 2013 12:01:02 +0100, Szymon Gatner <noemail at gmail.com>  
>> wrote:
>>> D is the only language (that I am aware of) that has first class unit  
>>> testing support. What do you think? Do we really just "mentally  
>>> masturbate"?
>>
>> I'm more interested in whether DCI is doable/natural in D.. that seems  
>> like an interesting idea.
>>
>> R
>
> I actually learned about DCI from that very presentation and am
> wondering the same thing.

So.. to me it seems the basic idea is that you have your object i.e.  
BankAccount which is a dumb/data object with few methods (perhaps just  
properties).  Then, depending on the use-case it participates in, it takes  
on a role (at run time) which carries with it some methods.

So.. something like?

import std.stdio;

// Dumb/data object
class BankAccount
{
public:
   string name;
   int balance;

   this(string _name, int _balance)
   {
     name = _name;
     balance = _balance;
   }
}

// Roles..
class SourceAccount(T)
{
private:
   T account;

public:
   alias account this;

   this(T _account)
   {
     account = _account;
   }

   void TransferTo(TargetAccount!BankAccount target, int amount)
   {
     target.balance += amount;
     balance -= amount;
   }
}

class TargetAccount(T)
{
private:
   T account;

public:
   alias account this;

   this(T _account)
   {
     account = _account;
   }
}

// Use case..
void TransferFunds(BankAccount sa, BankAccount ta, int amount)
{
   auto source = new SourceAccount!BankAccount(sa);
   auto target = new TargetAccount!BankAccount(ta);
   source.TransferTo(target, amount);
}

// Logic..
void main()
{
   auto savings = new BankAccount("savings", 10000);
   auto current = new BankAccount("current", 250);
	
   writefln("Current balances: ");
   writefln("  %s: %d", savings.name, savings.balance);
   writefln("  %s: %d", current.name, current.balance);
	
   writefln("");
   writefln("Transfer funds..");
   TransferFunds(savings, current, 500);
	
   writefln("");
   writefln("New balances: ");
   writefln("  %s: %d", savings.name, savings.balance);
   writefln("  %s: %d", current.name, current.balance);
}

R
-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


More information about the Digitalmars-d mailing list