相关疑难解决方法(0)

面向对象的编程和事务

一点介绍:

类包含字段和方法(这次让我跳过属性).
字段表示类的状态.
方法描述了类的行为.

在设计良好的类中,如果类抛出异常,方法不会改变类的状态,对吧?(换句话说,无论发生什么,类的状态都不应该被破坏)

题:

是否有框架,设计模式,最佳实践或编程语言来调用事务样式中的一系列方法,以便任何类的状态都不会被更改(如果是异常),或者一切都成功了?

例如:

// the class foo is now in the state S1
foo.MoveToState2();
// it is now (supposed to be) in the state S2
foo.MoveToFinalState();
// it is now (supposed to be) in the state, namely, S3
Run Code Online (Sandbox Code Playgroud)

当然,在MoveToState2()和中可能会发生异常MoveToFinalState().但是从这段代码中我希望类foo处于状态S1或S3.

这是一个简单的场景,涉及单个类,没有if,没有while,没有副作用,但我希望这个想法很清楚.

architecture oop

10
推荐指数
2
解决办法
3140
查看次数

C#中的事务

首先,这不是关于数据库事务的帖子.我想更多地了解.NET 2.0及更高版本中的TransactionModel.由于我正在针对.NET 3.5进行开发,因此新版本的应用程序会受到关注.

现在,我想要实现的是以下内容

    public void Withdraw(double amount)
    {
        using (TransactionScope scope = new TransactionScope())
        {
            Money -= amount;

            if (Money > 0)
                scope.Complete();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这意味着当Money小于0时,内部的所有内容都TransactionScope应该是RolledBack,但是,它不是.

一个简单的测试如下

        ImportantObject obj = new ImportantObject(1);

        Console.WriteLine(obj.Money);

        obj.Withdraw(101);

        Console.WriteLine(obj.Money);
Run Code Online (Sandbox Code Playgroud)

前提是Stadard Money金额为100.

我在这里遗漏了什么,或者这不是交易应该如何运作的?使用这个型号的性能损失是多少?

.net c# transactions

8
推荐指数
2
解决办法
642
查看次数

标签 统计

.net ×1

architecture ×1

c# ×1

oop ×1

transactions ×1