草庐IT

会计学包含的两种程序设计思想

编程一生 2023-03-28 原文

下班路上坐地铁的时候看了一本会计学的书,目前看了50多页。过程中,发现会计学和程序设计在思想上有惊人的相似之处。今天举两个例子做说明。

 

CR设计和账簿

 

CR设计介绍

 

CR设计就是只有创建和查询,没有更新和删除。咱们后台人工操作,设计数据变更都需要有历史记录。历史记录和数据变更的最终结果区别在于历史记录有数据不变性,可以进行事件溯源。这个方法在《整洁架构》中有专门的介绍。现在非常流行的时序数据库本质也是这一思想的具体实现。

 

账簿介绍

 

这个思想的产生要追溯到石器时代。石器时代就有结绳记事。那些绳子就是原始人的账簿。登记方法就是增加的时候在上面接个大疙瘩,减少的时候解开大疙瘩。随后,绳子演变成了苏美尔人的泥巴或者殷商人的龟甲,估计就是在上面画道道,画一些线条表示增加,另一些线条表示减少。估计那个时候中国人还不知道“+”和“-”这两个符号,只好把增加和减少分开写,中国人的习惯是上面写增加、下面写减少(天收地付)。

 

CR设计应用

 

在现在的工程架构中,能运用软件的就尽量不用硬件。因为它们缺少日志记录,如果发生了异常情况难以排查。举个例子,二层防火墙因为不能做负载均衡,都是主备类部署。一旦一台出现故障必须立即停掉主,启用备。发生比特位跳变等问题,没有现场,也没有日志,重启这台机器也不会再次故障,难以确认原因。不能确认原因怎么能确保下次不会再出现问题呢?强烈建议将出现故障不能给出原因的处理列到购买合同里。

 

下面是一个常用的一种主备模式叫A/S模式的原理图。扯远了。

 

 

 

校验设计和复式记账法

 

校验设计介绍

 

咱们平时做通信,收到的数据包都有校验和。金融支付领域都有对账。毕竟完整性、准确性和一致性是数据质量最重要的三个标准。

 

复式记账法介绍

 

这个思想也深得复式记账法的精髓。复式记账法是指对发生的每一项经济业务,都要以相等的金额,在相互联系的两个或两个以上的账户中进行记录的记账方法。

 

这种方法的优点是对于发生的每一项经济业务,都要在两个或两个以上的账户中相互联系地进行分类记录。这样,通过账户记录不仅可以全面、清晰地反映经济业务的来龙去脉,还能全面、系统地反映经济活动的过程和结果。由于每一项经济业务发生后,都是以相等的金额在有关的账户中登记,因而可以对记录的结果进行试算平衡,以检查账户记录是否正确。

 

校验设计应用

咱们网上取款的时候有双因素校验,不但登录要输入密码,取款还要发一个手机验证码确认是本人。咱们的代码要上线要经过静态代码检查、代码人工审查、集成测试检查等环节才能合并到主分支。咱们从一个系统定时同步数据时一般会实时获取增量数据,同时配合定时任务拉取全量做比对。

 

总结

 

对于一门技术,有些人学的很快,很可能是他有意识的或者潜意识的进行抽象类比,找出共性和个性,掌握精髓。比如工作中、技术中、各个领域中都在用各种形式的“分类”:这本会计书上说会计就是分类的艺术。常用的思维导图不就是一个分类工具么?数据结构化不就是把数据分类吗?由此还产生了搜索引擎。

 

思考--你的工作!(出自《程序员修炼之道》)

有关会计学包含的两种程序设计思想的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  4. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

随机推荐