我经常听到人们称赞语言,框架,结构等是"明确的".我试图理解这个逻辑.语言,框架等的目的是隐藏复杂性.如果它让你明确指定所有类型的细节,那么它不会隐藏太多的复杂性,只会移动它.什么是显性的如此伟大,你如何使语言/框架/ API"明确",同时仍然使其服务于隐藏复杂性的目的?
受到原始主题和即将到来的克隆的启发,这里是Perl社区的一个.
一个优秀的Perl程序员应该能够回答什么问题?
假设您正在为具有许多属性(2400+)的实体建模,远远大于给定数据库引擎的物理限制(例如~1000 SQL Server).除了域/候选键之外,对这些数据点的相对重要性(哪些是最常用的/最常用的)一无所知,您将如何实现它?
A)EAV.(嘘...本机关系工具抛出窗外.)
B)直接穿过.第一个表有一个主键和1000列,直到极限.下表是1000,外键是第一个.最后一张表是剩余的400,也是外键.
C)在ceil( n / limit )表格上均匀条纹.每个表都有偶数列,外键键到第一个表.800,800,800.
D)别的......
为什么?
编辑:这更像是一个哲学/通用问题,与任何特定限制或引擎无关.
编辑^ 2:正如许多人所指出的那样,数据可能没有规范化.按照惯例,当时的业务限制使深入研究成为不可能.
我经常使用类似的东西
my $dir="/path/to/dir";
opendir(DIR, $dir) or die "can't open $dir: $!";
my @files = readdir DIR;
closedir DIR;
Run Code Online (Sandbox Code Playgroud)
或者有时我会使用glob,但无论如何,我总是需要添加一两行来过滤掉.,..这很烦人.你通常如何处理这项共同任务?
我需要阅读2个日期并进行比较.
一个日期是current_date(年,月,日),另一个是由业务逻辑确定的.然后我需要比较两个日期,看看是否有一个在另一个之前.
我怎样才能在Perl中做同样的事情?
我正在寻找好的文档,但我在Perl中找到了很多Date模块.不知道哪一个适合它.
我有一个视图,从几个表收集数据.虽然视图本身没有索引,但使用视图的任何内容似乎都会从具有索引的基础表中受益.这些是自动使用的吗?如果是,那么在您的视图上创建索引的重点是什么?任何关于这一主题的推荐文章都会受到欢迎.
假设我有一张表代表超级班的学生.然后我有N个表格代表该对象的子类(运动员,音乐家等).我如何表达一个约束,以便学生必须在一个(不多于,不少于)子类中建模?
有关评论的澄清:
A)以真正的面向对象的方式,超类可以自己存在,不需要在任何子类中建模.
B)在现实生活中,任何对象或学生都可以有多个角色.
C)我试图说明的特定场景要求每个对象只在一个子类中实现.将超类视为抽象实现,或者只考虑其他不同的对象类/实例中的共性.
感谢大家的投入,特别是比尔.
我目前负责一个似乎与数据库非常亲密的过程.我的程序/脚本/框架的目标是从不同的数据源中实现统一.使用依赖注入的形式,我的进程在很高的水平上工作正常.每个数据源类型的实现都隐藏在最高级别的业务抽象中.大.我的问题是两个.
1)我有一个很长的段落(这是困扰我的长度),它在Perl空间中组装了一个如何将这些不同数据源转换为一个同类结束格式的SQL语句.所以SQL字符串总是取决于我正在使用的数据类型.WHERE子句依赖,FROM子句依赖,INSERT子句依赖,它全部依赖.这是高度依赖性让我感到困惑.如何以面向对象的方式对此过程进行建模?MagicObject-> buildSQL?这基本上就是我现在所拥有的,但感觉代码的所有部分都知道太多,因此它的长度.
2)如果我有一个能做某事的函数(构建SQL?),我是否将整个业务对象传入,然后在最后一分钟对它们进行字符串化?或者我是否尽早将它们串联起来,只让我的函数处理它需要的东西,而不是渲染对象本身?
编辑:虽然我不怀疑ORM的重要性,但我不认为我们还处于ORM领域.想象一下,美国,国家和虚构联盟的棒球数据都以不同的格式存储,具有不同的标准化水平.读取这些数据源并将它们放在一个统一的标准化池中是我的过程的工作.我觉得在我的过程之后发生了对这些物体采取行动的ORM空间.如果你愿意,我是一名数据看门人.由于缺少我创建的统一池,因此基本上没有业务对象可以采取行动.
编辑^ 2:引起我的注意,也许我没有详细描述问题空间.这是一个例子.
想象一下,你必须建立一个美国所有罪犯的主数据库.贵公司的服务是销售一种产品,该产品位于顶部并以干净,统一的格式提供对这些数据的访问.
这些数据由50个州公开提供,但格式完全不同.有些是一个数据文件,没有标准化.其他是CSV格式的规范化表格.有些是Excel文档.有些是TSV.甚至提供了一些在没有人工干预的情况下不完整的记录(其他,手动创建的数据源).
我的项目的目的是为50个州中的每个州制定一个"驱动程序",并确保该过程的最终产品是一个完美的关系模型中的犯罪分子的主数据库.一切都正确键入,架构完美,等等.
类似"int"表示"Int32"类,"string"表示"String"类.如何将像"abc"这样的数据类型引用到我的"Abc"类?
所以我有/trunk,所有金色的东西最终都归于此.我有一个主题分支,/topicA.
通常,您将合并/topicA到主干,它将是一个提交.万岁!要撤消此合并,您只需反向合并此合并引起的提交.十分简单.
现在,让我们说我已经/topicA将它合并到/trunk......然后我有一个与之相关的错误修正/topicA.那么,我应该/topicA再次承诺吗?我甚至可以重新emerge /topicA使/trunk包含/topicA.但是如何/topicA轻松地回滚所有原创作品和错误修正?
提交历史:
/topicA/topicA/topicA/topicA成/trunk/topicA/topicA进入/trunk错误修正/topicA/topicA/topicA进入/trunk错误修正/topicA,包括错误修正)我知道你可以解开每个错误修复然后初始合并,但这看起来并不性感.
git也有答案吗?