gpt4 book ai didi

data-driven - 关于最小化代码和最大化数据哲学的思考

转载 作者:行者123 更新时间:2023-12-03 13:08:20 25 4
gpt4 key购买 nike

我听说过最小化代码和最大化数据的概念,并且想知道其他人在构建自己的系统时如何/为什么应该这样做的建议?

最佳答案

通常,数据驱动的代码更易于阅读和维护。我知道我已经看到数据驱动被极端化并且最终变得非常不可用的情况(我正在考虑我使用过的一些 SAP 部署),但是编写自己的“领域特定语言”来帮助你构建您的软件通常可以节省大量时间。

pragmatic programmers我所读过的写小语言的最生动的倡导者仍然在我的脑海中。运行很少输入语言的小型状态机可以用很少的空间完成很多工作,并且可以很容易地进行修改。

一个具体的例子:考虑累进所得税制度,税级为 1,000 美元、10,000 美元和 100,000 美元。低于 1,000 美元的收入是免税的。 1,000 美元至 9,999 美元之间的收入按 10% 征税。 10,000 美元至 99,999 美元之间的收入按 20% 征税。超过 100,000 美元的收入按 30% 征税。如果您将这一切都写在代码中,它看起来就像您怀疑的那样:

total_tax_burden(income) {
if (income < 1000)
return 0
if (income < 10000)
return .1 * (income - 1000)
if (income < 100000)
return 999.9 + .2 * (income - 10000)
return 18999.7 + .3 * (income - 100000)
}

添加新的税级、更改现有的税级或更改税级中的税负,都需要修改代码并重新编译。

但如果它是数据驱动的,您可以将此表存储在配置文件中:
1000:0
10000:10
100000:20
inf:30

编写一个小工具来解析这个表并进行查找(不是很困难,对吧?),现在任何人都可以轻松地维护税率表。如果国会决定 1000 个括号会更好,任何人都可以使表格与 IRS 表格对齐,并完成它,无需重新编译代码。相同的通用代码可用于一个括号或数百个括号。

现在来做一些不太明显的事情:测试。 AppArmor项目对加载各种配置文件时系统调用应执行的操作进行了数百次测试。一个示例测试如下所示:
#! /bin/bash
# $Id$

# Copyright (C) 2002-2007 Novell/SUSE
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, version 2 of the
# License.

#=NAME open
#=DESCRIPTION
# Verify that the open syscall is correctly managed for confined profiles.
#=END

pwd=`dirname $0`
pwd=`cd $pwd ; /bin/pwd`

bin=$pwd

. $bin/prologue.inc

file=$tmpdir/file
okperm=rw
badperm1=r
badperm2=w

# PASS UNCONFINED
runchecktest "OPEN unconfined RW (create) " pass $file

# PASS TEST (the file shouldn't exist, so open should create it
rm -f ${file}
genprofile $file:$okperm
runchecktest "OPEN RW (create) " pass $file

# PASS TEST
genprofile $file:$okperm
runchecktest "OPEN RW" pass $file

# FAILURE TEST (1)
genprofile $file:$badperm1
runchecktest "OPEN R" fail $file

# FAILURE TEST (2)
genprofile $file:$badperm2
runchecktest "OPEN W" fail $file

# FAILURE TEST (3)
genprofile $file:$badperm1 cap:dac_override
runchecktest "OPEN R+dac_override" fail $file

# FAILURE TEST (4)
# This is testing for bug: https://bugs.wirex.com/show_bug.cgi?id=2885
# When we open O_CREAT|O_RDWR, we are (were?) allowing only write access
# to be required.
rm -f ${file}
genprofile $file:$badperm2
runchecktest "OPEN W (create)" fail $file

它依赖一些辅助函数来生成和加载配置文件,测试函数的结果,并向用户报告。扩展这些小测试脚本要比不用一点语言来编写这种功能要容易得多。是的,这些是 shell 脚本,但它们与实际的 shell 脚本相去甚远;)它们实际上是数据。

我希望这有助于激发数据驱动的编程;恐怕我不像其他写过它的人那样 Eloquent ,而且我当然没有擅长它,但我尝试了。

关于data-driven - 关于最小化代码和最大化数据哲学的思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4397883/

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