我们的工作情况是,在已经感染了意大利面条代码的现有代码中添加新功能时,处理遗留(核心)系统的开发人员正在被迫使用GOTO语句.
现在,我明白可能存在使用"只需一个小GOTO"的论据,而不是花时间重构一个更易于维护的解决方案.问题是,这个孤立的"只有一点GOTO"并不是那么孤立.每周至少一次左右有一个新的"一点GOTO"要添加.由于代码可追溯到1984年或之前的GOTO,这使得许多Pastafarians认为它受到了Flying Spaghetti Monster本身的启发,因此这个代码库已经令人恐惧.
不幸的是,这里编写的语言没有任何现成的重构工具,因此更难以推动'Refactor以后提高生产力',因为短期胜利是这里唯一值得关注的胜利......
有没有其他人经历过这个问题,即每个人都同意我们不能添加新的GOTO来将2000行跳到一个随机区域,但是Anaylsts一直坚持这样做只是这一次并让管理层批准它?
tldr;
如何解决开发人员被迫(强制)不断添加GOTO语句的问题(通过添加,我的意思是添加跳转到随机区域多行),因为它" 更快地获得该功能"?
我开始担心我们可能会失去有价值的开发人员而不是这个...
澄清:
去 here
alsoThere:
不,我在谈论那种从一个子程序中跳出1000行到另一个子程序中途的goto.去 somewhereClose
there:
我甚至没有谈论你可以合理阅读的那种类型,并确定一个程序正在做什么.去 alsoThere
somewhereClose:
这是制作肉丸的那种代码midpoint:
如果第一次在这里转到 nextpoint
detail:
(每一个几乎完全不同)转到 pointlessReturn
here:
在这个问题中,我并没有谈论偶尔使用goto.去there
tacoBell:
它刚刚回到绘图板.去 Jail
elsewhere:
当分析师每周花一些时间来解决程序正在做什么时,你的代码库就会出现问题.事实上,我实际上取决于我的,hell:
如果不是最新的goto goto 4
转换goto detail
pointlessReturn:
goto tacoBell
Jail:
实际上,只是一个小胜利的小更新.我花了4个小时一次重构这个特定程序的一部分单个标签,因为我去了svn中的每次迭代.每一步(其中约20)为短小,逻辑和足够容易转到 bypass
nextpoint:
自发地跳出你一顿,并在您完成一些奇怪的那种面条,肉丸磁性的屏幕.转到 elseWhere
bypass:
合理地验证它不应该引入任何逻辑更改.使用这个新的更易读的版本,我与分析师坐下来,现在几乎完成了所有这些变化.去 end
4:
第一次*如果第一次在这里转到hell
,没有第二次,如果第一次在这里转到 hell
,没有第三次,如果第一次在这里转到 hell
第四次现在最新转到 hell
end:
我在App Engine数据存储区遇到了一个有趣的限制.我正在创建一个处理程序来帮助我们分析一个生产服务器上的一些使用数据.为了执行分析,我需要查询和汇总从数据存储中提取的10,000多个实体.计算并不难,它只是通过使用样本的特定过滤器的项目的直方图.我遇到的问题是,在达到查询截止日期之前,我无法快速从数据存储区中获取数据以进行任何处理.
我已经尝试了所有我能想到的将查询分块到并行RPC调用以提高性能,但根据appstats我似乎无法让查询实际并行执行.无论我尝试什么方法(见下文),似乎RPC总是回到顺序下一个查询的瀑布.
注意:查询和分析代码确实有效,它只是运行缓慢,因为我无法从数据存储中快速获取数据.
我没有可以分享的实时版本,但这里是我正在谈论的系统部分的基本模型:
class Session(ndb.Model):
""" A tracked user session. (customer account (company), version, OS, etc) """
data = ndb.JsonProperty(required = False, indexed = False)
class Sample(ndb.Model):
name = ndb.StringProperty (required = True, indexed = True)
session = ndb.KeyProperty (required = True, kind = Session)
timestamp = ndb.DateTimeProperty(required = True, indexed = True)
tags = ndb.StringProperty (repeated = True, indexed = True)
Run Code Online (Sandbox Code Playgroud)
您可以将样本视为用户使用给定名称功能的时间.(例如:'systemA.feature_x').标签基于客户详细信息,系统信息和功能.例如:['winxp','2.5.1','systemA','feature_x','premium_account']).因此,标签形成一组非规范化的标记,可用于查找感兴趣的样本.
我试图做的分析包括获取一个日期范围,并询问每个客户帐户(公司,而不是每个用户)每天(或每小时)使用的功能集(可能是所有功能)的特征次数.
因此处理程序的输入类似于:
输出将是:
[{
'company_account': <string>,
'counts': [
{'timeperiod': <iso8601 date>, …
Run Code Online (Sandbox Code Playgroud) 假设我们有一个名为'todos'的根集合.
此集合中的每个文档都包含:
title
:字符串todo_items
子集中的每个文档todo_items
都有
title
:字符串completed
:布尔值我知道默认情况下在Cloud Firestore中查询很浅,这很好,但有没有办法查询todos
并todo_items
自动获取包含子集合的结果?
换句话说,如何使以下查询包含todo_items
子集合?
db.collection('todos').onSnapshot((snapshot) => {
snapshot.docChanges.forEach((change) => {
// ...
});
});
Run Code Online (Sandbox Code Playgroud) database data-modeling firebase google-cloud-platform google-cloud-firestore
来自firebase的新firestore数据库本身是否支持基于位置的地理查询?即查找10英里内的帖子,或找到最近的50个帖子?
我看到实时firebase数据库有一些现有的项目,像geofire这样的项目 - 那些也可以适应firestore吗?
如何从数据存储中获取超过1000条记录并将所有内容放在一个列表中传递给django?
在我正在编写的Python Google App Engine应用程序中,我有一个存储在数据存储区中的实体,我需要检索它,制作它的精确副本(除了密钥),然后将此实体放回去.
我该怎么做?特别是,在做这个时我是否需要注意任何警告或技巧,以便获得我期望的那种副本而不是其他东西.
ETA: 嗯,我试了一下,确实遇到了问题.我想以这样的方式制作我的副本,以便在编写代码时不必知道属性的名称.我的想法是这样做:
#theThing = a particular entity we pull from the datastore with model Thing
copyThing = Thing(user = user)
for thingProperty in theThing.properties():
copyThing.__setattr__(thingProperty[0], thingProperty[1])
Run Code Online (Sandbox Code Playgroud)
执行时没有任何错误......直到我尝试从数据存储中提取copyThing,此时我发现所有属性都设置为None(显然除了用户和密钥).很明显,这段代码正在做一些事情,因为它正在用None替换默认值(所有属性都设置了默认值),但根本不是我想要的.建议?
在Firestore中,如何获取集合中的文档总数?
例如,如果我有
/people
/123456
/name - 'John'
/456789
/name - 'Jane'
Run Code Online (Sandbox Code Playgroud)
我想查询我有多少人并获得2.
我可以对/ people进行查询然后得到返回结果的长度,但这似乎是浪费,特别是因为我将在更大的数据集上执行此操作.
我无法理解哪些元素被称为第一层,第二层和第三层以及它们所在的位置.它们可以驻留在同一台机器或不同的机器上.哪一层驻留在哪台机器上?我们如何将特定应用程序标识为2层应用程序或3层应用程序.请举例说明
我有一个文档"用户",其中有一个名为"照片"的键.这是保存的字符串数组,即"照片"文档的ID.
我想通过此"照片"字段查询"用户":我希望在"照片"属性中拥有此ID的所有用户.
这可能通过firestore吗?
data-modeling firebase google-cloud-platform google-cloud-firestore