我应该创建一个类还是添加一个属性

时间:2014-12-13 04:59:38

标签: c# wpf mvvm architecture

我目前正在设计一个软件,使用C#/ WPF和MVVM模式来跟踪和管理个人的财务。这是我自己做的个人项目,我开始对利用这些技术获得更多知识并投入我的投资组合感兴趣,因此没有时间/金钱/等限制,我正在努力做到最好决策设计明智。

在我的软件的模型部分中,我目前拥有继承公共接口Expense的类IncomeITransaction。我还有类似BankAccountCreditCardLoan的类,它们继承了公共接口IAccount。费用和收入在它们之间没有任何差异,它们具有相同的属性,如NameDescription等。BankAccountCreditCard和{{1它们都具有相同的属性。由于它们属于MVVM的模型部分,据我所知,它们不应该有方法,因为它们不应该直接在它们中实现任何逻辑(除了可以在属性本身中完成的属性验证)。

我早期遇到的一个问题(我实际上刚刚开始这个项目)是,我是否应该改变这种设计,因为当他们模拟现实生活的具体内容时,他们之间没有任何区别({{ 1}}只是Loan等的复制粘贴。我是否应该更改我的设计,例如,Expense类中的Income属性,以便区分收入和费用,而不是让类类型做差异?

从长远来看,每种方法的优点和缺点是什么?

2 个答案:

答案 0 :(得分:1)

如果你在两者之间徘徊,你可以从更简单的选项开始 - 一个具有指示交易类型的属性的类。

public class Transaction
{
    public string AccountNumber { get; set; }

    public decimal Amount { get; set; }

    public TransactionType TransType { get; set; }
}

public enum TransactionType
{
    Income,
    Expense
}

如果您稍后决定这两个概念是分歧的,并且您需要单独的功能,您可以始终创建扩展Transaction的单独类,这有望防止一些​​重构问题:

public class Credit : Transaction
{
    public Credit()
    {
        TransType = TransactionType.Income;
    }

    public void SomeOtherMethodYouRealizedYouNeed()
    {
        // Do something
    }
}

public class Expense : Transaction
{
    public Expense()
    {
        TransType = TransactionType.Expense;
    }

    public int SomeNewProperty { get; set; }
}

只是我的两分钱......

答案 1 :(得分:0)

最后,我将保持我的设计方式,即ExpenseIncome类继承ITransaction接口(同样适用于BankAccount },LoanCreditCardIAccount接口)因为,正如评论所指出的那样,即使有一天我需要来自这些类的不同行为,它也是最容易重构的。这可能就像不同的属性验证逻辑一样简单(即使它们ExpenseIncome只有属性而没有方法,也可能就是这种情况)。

此外,类是应该根据您的软件使用的对象或现实生活概念建模的。我认为,出于这个原因,ExpenseIncomeBankAccountLoanCreditCard应该是课程,即使目前没有任何区别他们之间的逻辑,因为那些是概念或"对象"我的软件必须建模。