gpt4 book ai didi

c#接口(interface)隔离原则实例混淆

转载 作者:行者123 更新时间:2023-11-30 12:46:01 25 4
gpt4 key购买 nike

我对编程还很陌生,我很难理解如何有效地应用以下链接(ATM 链接)中显示的原则:

http://www.objectmentor.com/resources/articles/isp.pdf

基本上它从一个不提示 ISP(接口(interface)隔离原则)的设计开始,然后向前推进将行为重构到不同的接口(interface)中。

我的问题是:难道我们不使用接口(interface)来表达不那么(或不)相关的抽象之间的共同行为吗?

如果连一个方法都不会与将要实现它们的类共享,那么在接口(interface)中封装方法有什么意义呢?在哪种情况下这可能被认为有用?

如果我们继续示例的行,则给出以下代码:

public interface ITransaction
{
void Execute();
}

public interface IDepositUi
{
void RequestDepositAmount();
}

public class DepositTransaction : ITransaction
{
private IDepositUi depositUI;

public DepositTransaction(IDepositUi ui)
{
depositUI = ui;
}

public virtual void Execute()
{
/*code*/
depositUI.RequestDepositAmount();
/*code*/
}
}

public interface WithdrawalUI
{
void RequestWithdrawalAmount();
}

public class WithdrawalTransaction : ITransaction
{
private WithdrawalUI withdrawalUI;

public WithdrawalTransaction(WithdrawalUI ui)
{
withdrawalUI = ui;
}

public virtual void Execute()
{
/*code*/
withdrawalUI.RequestWithdrawalAmount(); /*code*/
}
}

public interface TransferUI
{
void RequestTransferAmount();
}

public class TransferTransaction : ITransaction
{
private TransferUI transferUI;

public TransferTransaction(TransferUI ui)
{
transferUI = ui;
}

public virtual void Execute()
{
/*code*/
transferUI.RequestTransferAmount();
/*code*/
}
}

public interface UI : IDepositUi, WithdrawalUI, TransferUI
{
}

据我所知,为了使用以前的设计,我们应该有类似的东西:

UI impui = new IMPLEMENTATIONUI(); // Some UI implementation
DepositTransaction dt = new DepositTransaction(Gui);
dt.Execute();

现在,我们不需要 IMPLEMENTATIONUI 实现每个方法吗?如果是这样,它不会破坏 SRP 吗?

最佳答案

难道我们不使用接口(interface)来表达不那么(或不那么)相关的抽象之间的共同行为吗?

是的,在 SOLID 中,需要接口(interface)来表达共同的行为。您的 Transaction 接口(interface)就是一个很好的例子。 DepositTransaction 和 WithdrawlTransaction 类都依赖于它。 ISP(Interface Segregation Principle)希望你将其拆分出来,因为你可能需要将一个 Transaction 对象传递给一个函数来执行它。所有 SOLID 原则都是设计例如:

void ExecuteTransaction(Transaction transaction)
{
transaction.Execute();
}

请注意,此方法只依赖于 Transaction 接口(interface)。这就是依赖倒置。

如果您不创建此接口(interface),则需要创建两种不同的方法来执行 WithdrawlTransaction 或 DepositTransaction;相反,您可以使用 ExecuteTransaction 方法并传入任何实现 Transaction 的内容。

ExecuteTransation(withdrawl_TransactionObject);

ExecuteTransaction(deposit_TransactionObject);

或以后的时间:

ExecuteTransaction(unanticipatedNewTypeOf_TransactionObject);

现在,我们不需要 IMPLEMENTATIONUI 实现每个方法吗?如果是这样,它不会破坏 SRP 吗?

用户界面可能是用户用来与软件交互的界面。用户不会有单一职责,理论上他/她将必须使用 IMPLEMENTATIONUI 类所需的所有接口(interface)。

我怀疑实现 UI 是否会实现所有接口(interface),但它可能会使用所有这些接口(interface)来执行事务。转述“鲍勃叔叔”Solid Principles您的用户界面应该充满 volatile 代码,而您的界面应该是最稳定的。

关于c#接口(interface)隔离原则实例混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com