Commit d6420cf

mokhan <mokhan@ce5e1baf-6525-42e4-a1b2-857ea38da20a>
2009-04-30 19:24:20
cleanup and refactoring domain.
git-svn-id: https://svn.xp-dev.com/svn/mokhan-mo.money@199 ce5e1baf-6525-42e4-a1b2-857ea38da20a
1 parent 26c0f97
trunk/product/Gorilla.Commons.Utility/Extensions/VisitorExtensions.cs
@@ -3,20 +3,18 @@ using Gorilla.Commons.Utility.Core;
 
 namespace Gorilla.Commons.Utility.Extensions
 {
-    public static class VisitorExtensions
+    static public class VisitorExtensions
     {
-        public static Result return_value_from_visiting_all_items_with<Result, T>(this IEnumerable<T> items,
-                                                                                  IValueReturningVisitor<Result, T>
-                                                                                      visitor)
+        static public Result return_value_from_visiting_all_items_with<Result, T>(this IEnumerable<T> items, IValueReturningVisitor<Result, T> visitor)
         {
             visitor.reset();
             items.visit_all_items_with(visitor);
             return visitor.value;
         }
 
-        public static void visit_all_items_with<T>(this IEnumerable<T> items, IVisitor<T> visitor)
+        static public void visit_all_items_with<T>(this IEnumerable<T> items, IVisitor<T> visitor)
         {
-            foreach (var item in items) visitor.visit(item);
+            items.each(visitor.visit);
         }
     }
 }
\ No newline at end of file
trunk/product/Gorilla.Commons.Utility/Year.cs
@@ -6,11 +6,20 @@ namespace Gorilla.Commons.Utility
     {
         readonly int the_underlying_year;
 
+        public Year(int year) : this(new DateTime(year, 01, 01))
+        {
+        }
+
         public Year(DateTime date)
         {
             the_underlying_year = date.Year;
         }
 
+        static public implicit operator Year(int year)
+        {
+            return new Year(year);
+        }
+
         public bool Equals(Year obj)
         {
             if (ReferenceEquals(null, obj)) return false;
trunk/product/MoMoney.DataAccess/Repositories/BillRepository.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 using Gorilla.Commons.Infrastructure.Transactions;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 
 namespace MoMoney.DataAccess.repositories
trunk/product/MoMoney.DataAccess/Repositories/CompanyRepository.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using Gorilla.Commons.Infrastructure.Transactions;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 
 namespace MoMoney.DataAccess.repositories
trunk/product/MoMoney.DataAccess/Repositories/IncomeRepository.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 using Gorilla.Commons.Infrastructure.Transactions;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 
 namespace MoMoney.DataAccess.repositories
trunk/product/MoMoney.Domain/Accounting/Billing/IEmployee.cs
@@ -1,5 +0,0 @@
-namespace MoMoney.Domain.accounting.billing
-{
-    public interface IEmployee
-    {}
-}
\ No newline at end of file
trunk/product/MoMoney.Domain/Accounting/AccountHolder.cs
@@ -2,8 +2,7 @@ using System;
 using System.Collections.Generic;
 using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.accounting.billing;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 
 namespace MoMoney.Domain.accounting
@@ -19,15 +18,15 @@ namespace MoMoney.Domain.accounting
     [Serializable]
     public class AccountHolder : Entity<IAccountHolder>, IAccountHolder
     {
+        IList<IBill> all_bills { get; set; }
+        IList<IIncome> income_collected { get; set; }
+
         public AccountHolder()
         {
             all_bills = new List<IBill>();
             income_collected = new List<IIncome>();
         }
 
-        private IList<IBill> all_bills { get; set; }
-        private IList<IIncome> income_collected { get; set; }
-
         public void receive(IBill bill)
         {
             all_bills.Add(bill);
trunk/product/MoMoney.Domain/Accounting/AccountHolderSpecs.cs
@@ -3,8 +3,7 @@ using System.Collections.Generic;
 using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Testing;
 using Gorilla.Commons.Utility;
-using MoMoney.Domain.accounting.billing;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 
 namespace MoMoney.Domain.accounting
@@ -72,7 +71,7 @@ namespace MoMoney.Domain.accounting
                             sut.receive(income_for_january_2007);
                             sut.receive(income_for_february_2007);
                             sut.receive(income_for_february_2008);
-                            result = sut.calculate_income_for(2007.as_a_year());
+                            result = sut.calculate_income_for(2007);
                         };
 
         it should_return_the_correct_amount = () => result.should_be_equal_to(2000.as_money());
trunk/product/MoMoney.Domain/Accounting/AnnualIncomeVisitor.cs
@@ -0,0 +1,29 @@
+using Gorilla.Commons.Utility;
+using Gorilla.Commons.Utility.Core;
+using MoMoney.Domain.Core;
+
+namespace MoMoney.Domain.Accounting
+{
+    public class AnnualIncomeVisitor : IValueReturningVisitor<Money, IIncome>
+    {
+        readonly Year year;
+
+        public AnnualIncomeVisitor(Year year)
+        {
+            this.year = year;
+            reset();
+        }
+
+        public void visit(IIncome x)
+        {
+            if (x.date_of_issue.is_in(year)) value = value.add(x.amount_tendered);
+        }
+
+        public Money value { get; set; }
+
+        public void reset()
+        {
+            value = new Money(0);
+        }
+    }
+}
\ No newline at end of file
trunk/product/MoMoney.Domain/Accounting/Billing/Bill.cs → trunk/product/MoMoney.Domain/Accounting/Bill.cs
@@ -2,9 +2,10 @@ using System;
 using System.Collections.Generic;
 using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Extensions;
+using MoMoney.Domain.accounting.billing;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public interface IBill : IEntity
     {
@@ -18,6 +19,8 @@ namespace MoMoney.Domain.accounting.billing
     [Serializable]
     public class Bill : Entity<IBill>, IBill
     {
+        IList<IPayment> payments { get; set; }
+
         public Bill(ICompany company_to_pay, Money the_amount_owed, DateTime due_date)
         {
             this.company_to_pay = company_to_pay;
@@ -29,7 +32,6 @@ namespace MoMoney.Domain.accounting.billing
         public ICompany company_to_pay { get; private set; }
         public Money the_amount_owed { get; private set; }
         public Date due_date { get; private set; }
-        public IList<IPayment> payments { get; private set; }
 
         public bool is_paid_for()
         {
@@ -41,7 +43,7 @@ namespace MoMoney.Domain.accounting.billing
             payments.Add(new Payment(amount_to_pay));
         }
 
-        private Money the_amount_paid()
+        Money the_amount_paid()
         {
             return payments.return_value_from_visiting_all_items_with(new TotalPaymentsCalculator());
         }
@@ -64,7 +66,8 @@ namespace MoMoney.Domain.accounting.billing
 
         public override int GetHashCode()
         {
-            unchecked {
+            unchecked
+            {
                 var result = (company_to_pay != null ? company_to_pay.GetHashCode() : 0);
                 result = (result*397) ^ (the_amount_owed != null ? the_amount_owed.GetHashCode() : 0);
                 result = (result*397) ^ due_date.GetHashCode();
trunk/product/MoMoney.Domain/Accounting/Billing/BillingExtensions.cs → trunk/product/MoMoney.Domain/Accounting/BillingExtensions.cs
@@ -1,4 +1,4 @@
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public static class BillingExtensions
     {
trunk/product/MoMoney.Domain/Accounting/Billing/BillSpecs.cs → trunk/product/MoMoney.Domain/Accounting/BillSpecs.cs
@@ -3,7 +3,7 @@ using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Testing;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     [Concern(typeof (Bill))]
     public class when_checking_to_see_if_a_new_bill_has_been_paid_for : concerns_for<IBill>
trunk/product/MoMoney.Domain/Accounting/Billing/Company.cs → trunk/product/MoMoney.Domain/Accounting/Company.cs
@@ -1,9 +1,9 @@
 using System;
 using Gorilla.Commons.Utility;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.accounting;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public interface ICompany : IEntity
     {
trunk/product/MoMoney.Domain/Accounting/Billing/CompanyFactory.cs → trunk/product/MoMoney.Domain/Accounting/CompanyFactory.cs
@@ -1,7 +1,7 @@
 using Gorilla.Commons.Utility.Core;
 using MoMoney.Domain.repositories;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public interface ICompanyFactory : IFactory<ICompany>
     {
trunk/product/MoMoney.Domain/Accounting/GeneralLedger.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Collections.Generic;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 
 namespace MoMoney.Domain.accounting
trunk/product/MoMoney.Domain/Accounting/GeneralLedgerSpecs.cs
@@ -2,7 +2,7 @@ using System;
 using System.Collections.Generic;
 using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Testing;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 
 namespace MoMoney.Domain.accounting
trunk/product/MoMoney.Domain/Accounting/Billing/ILedgerEntry.cs → trunk/product/MoMoney.Domain/Accounting/ILedgerEntry.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public interface ILedgerEntry
     {
trunk/product/MoMoney.Domain/Accounting/Growth/income.cs → trunk/product/MoMoney.Domain/Accounting/Income.cs
@@ -1,9 +1,8 @@
 using System;
 using Gorilla.Commons.Utility;
-using MoMoney.Domain.accounting.billing;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.Accounting.Growth
+namespace MoMoney.Domain.Accounting
 {
     public interface IIncome : IEntity
     {
@@ -44,7 +43,8 @@ namespace MoMoney.Domain.Accounting.Growth
 
         public override int GetHashCode()
         {
-            unchecked {
+            unchecked
+            {
                 var result = (company != null ? company.GetHashCode() : 0);
                 result = (result*397) ^ (amount_tendered != null ? amount_tendered.GetHashCode() : 0);
                 result = (result*397) ^ (date_of_issue != null ? date_of_issue.GetHashCode() : 0);
trunk/product/MoMoney.Domain/Accounting/Growth/IncomeExtensions.cs → trunk/product/MoMoney.Domain/Accounting/IncomeExtensions.cs
@@ -3,15 +3,13 @@ using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.Accounting.Growth
+namespace MoMoney.Domain.Accounting
 {
     static public class IncomeExtensions
     {
         static public Money in_the(this IEnumerable<IIncome> income_collected, Year year)
         {
-            var income_for_year = new Money(0);
-            income_collected.each(x => { if (x.date_of_issue.is_in(year)) income_for_year = income_for_year.add(x.amount_tendered); });
-            return income_for_year;
+            return income_collected.return_value_from_visiting_all_items_with(new AnnualIncomeVisitor(year));
         }
     }
 }
\ No newline at end of file
trunk/product/MoMoney.Domain/Accounting/Billing/Payment.cs → trunk/product/MoMoney.Domain/Accounting/Payment.cs
@@ -1,7 +1,7 @@
 using System;
 using MoMoney.Domain.Core;
 
-namespace MoMoney.Domain.accounting.billing
+namespace MoMoney.Domain.Accounting
 {
     public interface IPayment : IEntity
     {
trunk/product/MoMoney.Domain/Accounting/Billing/TotalPaymentsCalculator.cs → trunk/product/MoMoney.Domain/Accounting/TotalPaymentsCalculator.cs
@@ -1,4 +1,5 @@
 using Gorilla.Commons.Utility.Core;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 
 namespace MoMoney.Domain.accounting.billing
trunk/product/MoMoney.Domain/Core/DateExtensions.cs
@@ -1,13 +0,0 @@
-using System;
-using Gorilla.Commons.Utility;
-
-namespace MoMoney.Domain.Core
-{
-    public static class DateExtensions
-    {
-        public static Year as_a_year(this int year)
-        {
-            return new Year(new DateTime(year, 01, 01));
-        }
-    }
-}
\ No newline at end of file
trunk/product/MoMoney.Domain/Core/range.cs
@@ -16,11 +16,13 @@ namespace MoMoney.Domain.Core
 
         public Range(T start_of_range, T end_of_range)
         {
-            if (start_of_range.CompareTo(end_of_range) < 0) {
+            if (start_of_range.CompareTo(end_of_range) < 0)
+            {
                 this.start_of_range = start_of_range;
                 this.end_of_range = end_of_range;
             }
-            else {
+            else
+            {
                 this.start_of_range = end_of_range;
                 this.end_of_range = start_of_range;
             }
trunk/product/MoMoney.Domain/Repositories/IBillRepository.cs
@@ -1,5 +1,5 @@
 using System.Collections.Generic;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 
 namespace MoMoney.Domain.repositories
 {
trunk/product/MoMoney.Domain/Repositories/ICompanyRepository.cs
@@ -1,6 +1,6 @@
 using System;
 using System.Collections.Generic;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 
 namespace MoMoney.Domain.repositories
 {
trunk/product/MoMoney.Domain/Repositories/IIncomeRepository.cs
@@ -1,5 +1,5 @@
 using System.Collections.Generic;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 
 namespace MoMoney.Domain.repositories
 {
trunk/product/MoMoney.Domain/MoMoney.Domain.csproj
@@ -59,21 +59,20 @@
   <ItemGroup>
     <Compile Include="Accounting\AccountHolder.cs" />
     <Compile Include="Accounting\AccountHolderSpecs.cs" />
-    <Compile Include="Accounting\Billing\Bill.cs" />
-    <Compile Include="Accounting\Billing\BillingExtensions.cs" />
-    <Compile Include="Accounting\Billing\BillSpecs.cs" />
-    <Compile Include="Accounting\Billing\Company.cs" />
-    <Compile Include="Accounting\Billing\CompanyFactory.cs" />
-    <Compile Include="Accounting\Billing\IEmployee.cs" />
-    <Compile Include="Accounting\Billing\ILedgerEntry.cs" />
-    <Compile Include="Accounting\Billing\Payment.cs" />
-    <Compile Include="Accounting\Billing\TotalPaymentsCalculator.cs" />
+    <Compile Include="Accounting\Bill.cs" />
+    <Compile Include="Accounting\BillingExtensions.cs" />
+    <Compile Include="Accounting\BillSpecs.cs" />
+    <Compile Include="Accounting\Company.cs" />
+    <Compile Include="Accounting\CompanyFactory.cs" />
+    <Compile Include="Accounting\ILedgerEntry.cs" />
+    <Compile Include="Accounting\Income.cs" />
+    <Compile Include="Accounting\Payment.cs" />
+    <Compile Include="Accounting\TotalPaymentsCalculator.cs" />
     <Compile Include="Accounting\GeneralLedger.cs" />
     <Compile Include="Accounting\GeneralLedgerSpecs.cs" />
-    <Compile Include="Accounting\Growth\income.cs" />
-    <Compile Include="Accounting\Growth\IncomeExtensions.cs" />
+    <Compile Include="Accounting\AnnualIncomeVisitor.cs" />
+    <Compile Include="Accounting\IncomeExtensions.cs" />
     <Compile Include="Accounting\IInvoice.cs" />
-    <Compile Include="Core\DateExtensions.cs" />
     <Compile Include="Core\Entity.cs" />
     <Compile Include="Core\Money.cs" />
     <Compile Include="Core\MoneyExtensions.cs" />
trunk/product/MoMoney.Service/Application/AddNewIncomeCommandSpecs.cs
@@ -2,8 +2,7 @@ using System;
 using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Testing;
 using Gorilla.Commons.Utility;
-using MoMoney.Domain.accounting.billing;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
trunk/product/MoMoney.Service/Application/GetAllBillsQuery.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
 
trunk/product/MoMoney.Service/Application/GetAllIncomeQuery.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.Accounting.Growth;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
 
trunk/product/MoMoney.Service/Application/RegisterNewCompanyCommand.cs
@@ -1,6 +1,6 @@
 using System.Linq;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
 
trunk/product/MyMoney/boot/container/registration/wire_up_the_services_in_to_the.cs
@@ -1,7 +1,7 @@
 using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.boot.container.registration.proxy_configuration;
-using MoMoney.Domain.accounting.billing;
+using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.Service.Application;