我们需要在C中实现一个简单的状态机。 标准的switch语句是最好的方法吗? 我们有一个现状(州)和过渡的触发器。 switch(state) { case STATE_1: state = DoState1(transition); break; case STATE_2: state = DoState2(transition); break; } … DoState2(int transition) { // Do State Work … if(transition == FROM_STATE_2) { // New state when doing STATE 2 -> STATE 2 } if(transition == FROM_STATE_1) { // New State when moving STATE 1 -> STATE […]
我们中的一些人在UIdevise( 尤其是我自己 )的柔和方面面临困难。 “后端编码器”是否注定只devise业务逻辑和数据层? 我们可以做些什么来重新训练我们的大脑 ,以便在devise令人愉悦和有用的表示层时更有效? 同事们推荐了几本书,包括网站的devise , 不要让我想 , 为什么软件很烂 ,但我想知道别人怎样去除这方面的不足?
很久以前,我已经阅读了一篇文章(我相信一个博客文章),这个文章将我放在命名对象的“正确”轨道上:在程序中对命名做出非常谨慎的规定。 例如,如果我的应用程序(作为一个典型的商业应用程序)处理用户,公司和地址,我会有一个User ,一个Company和一个Address域类 – 可能在某处UserManager ,一个AddressManager和一个AddressManager会popup处理那些事。 那么你能告诉那些UserManager , AddressManager和AddressManager做什么吗? 不,因为经理是一个非常通用的术语,适合任何你可以用你的域对象做的事情。 我读的文章推荐使用非常具体的名字。 如果这是一个C ++应用程序,并且UserManager的工作是从堆中分配和释放用户,那么它不会pipe理用户,而是保护他们的出生和死亡。 嗯,也许我们可以称之为UserShepherd 。 或者UserManager的工作是检查每个用户对象的数据并以密码方式签署数据。 然后我们有一个UserRecordsClerk 。 现在,这个想法坚持我,我尝试应用它。 而且很难find这个简单的想法。 我可以描述这些课程所做的事情(只要我没有陷入快速和肮脏的编码中),我写的课程只能做一件事。 我想从这个描述到名字的想法是一种名称目录,一个将概念映射到名称的词汇表。 最终,我想在我的脑海里有一个类似于模式目录的东西(通常devise模式很容易提供对象名称,例如工厂 ) 工厂 – 创build其他对象(从devise模式中获取的命名) 牧羊人 – 一个牧羊人处理对象的生命周期,他们的创build和closures 同步器 – 在两个或多个对象(或对象层次结构)之间复制数据 保姆 – 帮助对象在创build后达到“可用”状态 – 例如通过连接到其他对象 等等 那么,你如何处理这个问题呢? 你是否有固定的词汇量,你是否即刻发明新的名字,或者你认为命名不重要或错误? PS:我也感兴趣的文章和博客讨论这个问题的链接。 首先,这是原来的文章,让我想起它: 命名Java类没有“经理” 更新:答案摘要 下面是我从这个问题中学到的东西的一个小结。 尽量不要创造新的隐喻(保姆) 看看其他的框架是做什么的 关于此主题的更多文章/书籍: 你有什么名字定期地join/附加到课堂上? 什么是命名类的最好方法? 书: devise模式:可重用面向对象软件的元素(精装) 图书: 企业应用架构模式(精装) […]
我不熟悉网页devise,所以我做了所有我的网站简单的CSS3devise我没有使用引导,什么是最简单的方法,使网站响应,谢谢
我发现在这个问题的答复中描述的Bertrand Meyer的面向对象的软件构造在逐渐成为面向对象方面是非常宝贵的。 它改变了我想写代码的方式,并且间接地影响了我从那时起写的大部分内容。 我需要在一些我正在使用的项目中使用一些中型数据库,而且我希望对关系数据库有相同的performance。 我理解的基本概念 – 表包含组织成列的数据行,一些列作为一个关键的特殊function,键用于构build不同表之间的行关系,但我有兴趣获得这个理论的一个句柄决定了数据库devise的最佳实践。 是否有一个规范的文本,我可以读取这种理解? 是否有每个专业DBA都读过的东西? 我将使用ORM – SQLAlchemy – 这些项目,但我有兴趣以平台不可知的方式学习概念,因为我发现大多数SQLAlchemy教程更多地关注SQLAlchemy的机制而不是数据库的基础知识。
我正在开发一个React应用程序,这是我用于组件的方法:我使用PropTypesvalidation来validation我期望得到的道具,但我仍然指定默认值以避免它如果接收到的数据出错,就会中断。 最近有人告诉我,我们不应该这样做,道具是我们期望从父母那里得到的,如果合同不被允许让组件中断。 哪种方法是正确的,有什么优点和缺点? 我的一些考虑作为思考的食物。 按照我的初始方法,在testing中,我明确地testing了传递给被测组件的默认值一些无效的数据,并期望有效的快照仍然被打印出来。 testing不会因为一些不好的数据而失败,但是我打印出PropTypesvalidation警告(如果需要的话,虽然可以通过错误进行转换 – 我认为 – 或者在testing中嘲笑它们)。 这些警告在testing和实际应用程序中都比只看到“无法读取”someProp“未定义”或类似(并且让React渲染循环中断)的错误更加简洁明了。 propTypevalidation直接明确地告诉你你做错了什么(你通过错误的types作为道具,道具完全失踪等)。 使用第二种方法,而testing失败,因为应用程序中断。 我认为,只有当testing覆盖率真的很好(90/100%)时,这才是一个好方法,否则就是一种风险 – 它可能会在活动中破裂并破坏产品声誉。 重构或需求变更经常发生,一些边缘案例可能会以破坏应用程序的不希望的数据结束,而不是在自动或手动testing中捕获。 这意味着当应用程序处于活动状态时,由于某些不良数据,整个应用程序将停止工作,代码可能会在父组件中断,而在第一种情况下,应用程序具有弹性,并且以受控方式显示一些空的字段。 思考? 遵循一个简单的例子: React组件 import React from 'react'; import PropTypes from 'prop-types'; import styles from './styles.css'; export const App = ({ person : { name, surname, address, subscription } = {} }) => ( <div style={styles.person}> <p> {person.name} […]
我正在编写一个游戏引擎,我已经为这个对象设置了这个类: class SceneManager //controls everything in the "world" game { public: void Add(SceneObject* object); //adds to the vector private: vector<SceneObject*> _worldObjects; //the vector that contains all of them } 我在游戏中的所有类都是从SceneObjectinheritance的: class SceneObject { public: virtual void Draw() = 0; } class Image : public SceneObject { } class Sprite : public SceneObject { } class […]
在MVC应用程序中使用entity frameworkCode-First时,我正在寻找“最好的”地方的build议来放置validation逻辑,例如对实体进行重复检查。 使用一个简单的例子: public class JobRole { public int Id { get; set; } public string Name { get; set; } } 规则是“名称”字段必须是唯一的。 当我添加一个新的JobRole时,很容易在Job Role Repository中运行一个名称不存在的检查。 但是,如果用户编辑现有的JobRole,并意外地将名称设置为已存在的名称,我该如何检查? 问题是不需要在存储库上使用“更新”方法,因为作业angular色实体会自动检测到更改,因此在尝试保存之前没有合理的位置来执行此检查。 到目前为止我已经考虑了两个select: 重写DbContext上的ValidateEntry方法,然后在使用EntityState.Modified保存JobRole实体时,运行重复检查。 在尝试保存之前,创build一些从Controller调用的重复检查服务。 也不是真的很理想。 使用ValidateEntry看起来比较晚(就在保存之前),很难testing。 使用服务使人们忘记从控制器调用它,让重复的数据通过。 有没有更好的办法?
我想在我的应用程序中使用AsyncTask来pipe理一些业务逻辑。 使用分离文件中定义的AsyncTask的onProgressUpdate(…)方法(不是Activity innter类)的最佳模式是什么?我有两个想法: 1.最简单的方法:在Activity创buildProgressDialog (使用onCreateDialog(…)方法)并通过构造函数(在AsyncTask子类中覆盖onProgressUpdate(…) )传递对AsyncTask的子类的引用。 这个解决scheme的缺点是在业务逻辑代码中使用UI组件。 FooTask1.java: public class FooTask1 extends AsyncTask<Void, Integer, Void> { private ProgressDialog mProgressDialog; public FooTask1(ProgressDialog progressDialog) { super(); mProgressDialog = progressDialog; } @Override protected Void doInBackground(Void… unused) { // time consuming operation for (int i=0; i<=100; i++) { this.publishProgress(i); try { Thread.sleep(100); } catch (Exception e) {} } return […]
有时候,有必要禁止C ++类中的拷贝构造函数,以使类变为“不可拷贝”。 当然, operator=应该同时被禁止。 到目前为止,我已经看到两种方式来做到这一点。 方法1是将方法声明为私有,并且不执行: class Class { //useful stuff, then private: Class( const Class& ); //not implemented anywhere void operator=( const Class& ); //not implemented anywhere }; 方法2是将私有方法声明为“空”实现: class Class { //useful stuff, then private: Class( const Class& ) {} void operator=( const Class& ) {} }; 海事组织的第一个更好 – 即使有一些意想不到的原因导致从同一个类成员函数调用复制构造函数将稍后会出现链接器错误。 在第二种情况下,这个场景直到运行时才会被忽略。 第一种方法有没有严重的缺陷? 什么是更好的方法,如果有的话,为什么?