按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
he
difference between the two prices is subject to capital gains tax。
A variation of partial taxation is ine splitting; so that a lower tax rate is achieved。 Let’s
say that you have a household of two people。 One of the two earns the ine; and the other
stays at home。 In such a case; the household would be taxed at the same level as a single…person
household。 Yet the two…person household has more expenses。 Thus; some countries allow a
household to declare a single tax; where in effect; a single earner in a two…person household is
taxed at half the rate。
When calculating the total tax; some countries linearly increase the taxation rate。 Typically;
the linear tax rate is less for lower ines and more for higher ines。 Another approach is
to divide ine in chunks with different tax rates for each。 This means that those monies
earned up to a certain amount are taxed at a certain rate。 Monies above that amount and below
another higher amount are taxed at a higher rate。 This chunking of the amounts and rates keeps on
being calculated until a highest tax rate is reached; where any amounts over that upper limit
are taxed at the highest rate。
Organizing the Tax Application
As a general rule; in each country; you must pay an ine tax; which is calculated against your
total ine。 From your ine; you can deduct certain expenses; thus lowering your taxable
ine。 The aspects that differ from country to country are what you can deduct and the indi
vidual tax rate。 These will be addressed by the tax application we will build in this chapter。
For the tax application; the following features will be implemented:
o Define a taxable ine。
o Define a series of deductions。
o Implement a tax…calculation engine that has the ability to account for families or
single earners。
As in previous examples; the project structure of the taxation application will consist of
two projects: a console testing application and a library ponent that contains the function
ality。 The library ponent will be in a project called LibTax; and the testing application will
be in a project called TestTax。
Before we start coding; however; you need to understand the concepts of interfaces and
ponents。
…………………………………………………………Page 187……………………………………………………………
CH AP T E R 7 ■ L E AR N IN G AB O U T CO M P O N E N TS AN D C L AS S H I E R AR C HI E S 165
Programming Using Ideas
At this moment; we don’t have a clue where to start building the tax application; because the
problem is in the details of the implementation。 Unlike previous examples; where it was
possible to gauge what tests were needed; in this example; we simply do not know。 We could
start by implementing the general tax rules and then applying them to a specific system。 But
what if our general tax rule implementations didn’t actually work out? We would have wasted
time writing code that we would end up throwing out。
Consider the following situation: you write a series of base classes that represent a generic
taxation kernel based on the information in the “Understanding Some Basic Tax Concepts”
section。 The base classes need a task; and thus wait for a client。 A little while later; an individual
from the United Kingdom desires a tax program based on the base classes。 The developers;
eager to show off the usefulness of their base classes; implement the tax program。 The idea is
that you save time by using the base classes to implement something specific。 Without the base
classes; you would; in theory; have a longer development time。
Experience has shown that unless the base classes are developed from highly experienced
business analyses; the odds of the base classes helping you are rather slim。 What most likely
will happen is your base class code will need to be warped; twisted; and fitted to make the
program work。 The result is that if another client from another country asks for a tax program;
the base classes will yet again need to be warped; twisted; and fitted to make the program work。
The managers; seeing this brute…force technique; start to realize that the monies invested in
the base classes were not such a good idea。
Who is at fault? Is it the fault of the developers who created the base classes? Is it the fault
of the plexity of implementing a tax program? The answer is that it is the fault of the idea of
the base classes。 The original developers wanted to create base classes based on a problem that
does not exist。 It is like trying to build the foundation of the bridge across the water before you
have an idea of how many people will use the bridge and what kind of people will use the bridge。
Logically; engineers don’t start building a bridge before they figure out the details of the bridge。
Yet; in the software industry; time and time again; we see projects focusing on developing a
general framework without having a concrete problem to solve。
I am not saying that base classes themselves are a bad idea; nor is the idea of developing a
general framework。 What I am saying is that to be able to develop useful base classes; you need
to understand the domain of the base classes。 If you don’t; then you should not be writing base
classes。
But how do you gain experience in the domain to write well…designed base classes? You
can start by writing down some ideas as Visual Basic constructs and then implementing the
ideas。 ing up with ideas and then implementing them is part of the development process
called test…driven architecture。