小编Sis*_*hus的帖子

Javascript:如何理解所有框架和设计理念?

我曾经是jQuery(及其一些小插件)的用户.我多年来开发的Javascript代码最好被描述为......凌乱.它在这里和那里使用了大量的全局变量和函数,没有使用组织代码的标准方法,也没有使用任何设计模式.

我目前正在构建一个新版本的网站,我已经完成了与PEAR :: MDB2Smarty模板的后端.剩下的就是自制PHP和一些课程.

现在,我将在网站顶部添加Javascript图层,以提高某些功能的用户友好性.(同时确保一切都优雅地降级)我想写出比以前更好,更清晰,更有条理的Javascript,所以我做了一些研究.我阅读了Stefanov的面向对象的Javascript,以便更好地掌握我所知道的一些概念(原型,构造函数等).现在我陷入困境,我想知道我应该使用哪些Javascript框架,以及如何组织它们.

在进行我的研究之后,我理解了Cappuccino和Objective-J,而Sproutcore并不是我想要的.引用Cappucino关于页面的话:

卡布奇诺不是为建立网站或使现有网站更"动态"而设计的.我们认为这些目标与应用程序开发的目标相差甚远,无法通过单一框架提供.像Prototype和jQuery这样的项目非常适合这些任务

就是这样.然后我发现了Coffee Script,它更像是一对一的"编译器",并且无法帮助我实际组织我的代码.

我还偶然发现了一些提供指导的文章:

我还发现了Backbone.js,Shoestring,JavaScriptMVC,Google Loader,jQuery Tools,jQuery UI.我真的不知道该怎么办......我知道的事情:

  • 我不想花太多时间学习太复杂的东西,我希望尽可能保持简单和灵活(这就是为什么我不在后端使用Symfony),但是干净整洁.
  • 我想使用jQuery,问题是,我应该用它来做什么?(也兼容)

现在,我使用jQuery和jQuery Tools,并使用简单的属性和方法在一个简单的命名空间/对象文字中"组织"所有这些,并且,由于网站已本地化,我只是计划使用简单的vsprintf(就像我一样)在后端)使用键:从后端提供的对象文字加载的值对.JavaScriptMVC似乎很有趣,但我担心这会给规模相当小的项目带来太多的复杂性.这是我需要你的建议的地方!非常感谢你提前.

javascript jquery frameworks code-organization

23
推荐指数
1
解决办法
899
查看次数

Ruby"返回,除非是"成语

我有一个像臭的方法:

def search_record(*args)    
  record = expensive_operation_1(foo)
  return record unless record.nil?

  record = expensive_operation_2(foo, bar)
  return record unless record.nil?

  record = expensive_operation_3(baz)
  return record unless record.nil?

  record = expensive_operation_4(foo, baz)
  return record unless record.nil?
end
Run Code Online (Sandbox Code Playgroud)

对于"除非无效"的"回复结果",是否有一个好的红宝石成语?

或者我应该写一个return_unless_nil(&blk)方法?

(注意每个调用的args不同,所以我不能简单地迭代它们)

ruby idioms

16
推荐指数
1
解决办法
9900
查看次数

优雅地终止Python线程

我正在尝试编写一个侦听套接字,stdin和从文件描述符读取的unix客户端程序.我将每个任务分配给一个单独的线程,并使用同步队列和信号量成功地与"主"应用程序通信.问题是,当我想关闭这些子线程时,它们都会在输入时阻塞.此外,线程无法在线程中注册信号处理程序,因为在Python中只允许执行主线程.

有什么建议?

python multithreading

15
推荐指数
1
解决办法
3万
查看次数

返回可变对象的好方法

假设我有一个类Comment,我有一个名为commentDate的私有字段,它是一个java.util.Date,并带有一个名为getCommentDate的getter .

为什么最好返回该日期的副本(返回新日期(commentDate.getTime()))而不是简单地返回该日期...

用户如何更改该Date的对象状态,因为它是getter而不是setter?

java

13
推荐指数
3
解决办法
2万
查看次数

如何为着色器使用设计一个简单的GLSL包装器

更新:因为我马上就需要一些东西,所以我创建了一个简单的着色器包装器来完成我需要的东西.你可以在这里找到它:GitHub上的ShaderManager.请注意,它是为Objective-C/iOS设计的,因此对每个人都没有用.如果您对设计改进有任何建议,请告诉我们!

原始问题:

我是新手使用GLSL着色器.我对GLSL语言和OpenGL界面非常熟悉,但是我在设计一个简单的API时遇到了麻烦,通过它可以使用着色器.

用于与着色器交互的OpenGL C接口似乎很麻烦.我似乎无法在网上找到任何涵盖这类内容的API设计的教程.

我的问题是:任何人都有一个好的,简单的API设计或模式来包装OpenGL着色器程序API吗?

采用以下简单示例.假设我有一个顶点着色器,它只是模拟固定功能,还有两个片段着色器 - 一个用于绘制平滑矩形,另一个用于绘制平滑圆.我有以下文件:

Shader.vsh : Simple vertex shader, with the following inputs/outputs:
    -- Uniforms: mat4 Model, mat4 View, mat4 Projection
    -- Attributes: vec4 Vertex, vec2 TexCoord, vec4 Color
    -- Varying: vec4 vColor, vec2 vTexCoord

Square.fsh : Fragment shader for drawing squares based on tex coord / color
Circle.fsh : Fragment shader for drawing circles based on tex coord / color
Run Code Online (Sandbox Code Playgroud)

基本链接

现在使用这些的标准方法是什么?我是否将上述着色器链接到两个OpenGL着色器程序中?那是:

Shader.vsh + Square.fsh = SquareProgram
Shader.vsh + Circle.fsh = …
Run Code Online (Sandbox Code Playgroud)

opengl glsl wrapper ios

10
推荐指数
2
解决办法
6823
查看次数

程序设计 - 按功能与层或两者打包?

我正处于Web应用程序的设计阶段,该应用程序允许用户创建工作请求,工作人员可以根据这些请求投入时间.该应用程序还将为主管提供报告功能,以获取每日总计,报告和帐户所花费的时间,"成本分配".

我过去使用的应用程序是使用逐层方法设计的.我认为通过功能设计使用包会更有效率,我对这个设计有疑问.

我目前正在考虑的功能包:

  1. 请求 - CRUD请求,然后分配,添加发票号等...
  2. 工作时间 - 用户针对请求,假期,培训或会议的每日时间
  3. 成本分配 - 创建报告,会计师想要的会计事项......

前端将是Tomcat服务器和JSP.而且,后端将是一个Oracle数据库,EclipseLink执行持久性.

我的问题:

根据我对逐个包的理解,实体和DAO将进入与它们相关联的包.在多个包中展开持久层.将包从其他包中调用实体.所有的重叠是否真的有用?包之间没有隔离.使用打包功能有什么优缺点?使用额外的持久层是否是一个好的设计?或者,我是否完全理解这一点?

java packaging domain-driven-design web-applications

10
推荐指数
2
解决办法
5274
查看次数

回顾我的设计:使用面向对象方法的Tic tac toe游戏

这是一个面试问题.

使用面向对象原则设计一个tic tac toe.采访者说他对逻辑不感兴趣,他只想要设计.我给出了如下设计,但我并不完全满意.如果有任何建议/改进,请告诉我.

面试官对两件事非常讲究

  1. 该游戏可以播放nxn方格.
  2. 游戏规则应与应用程序的其余部分分开.

我的方法:

  1. Tic tac toe是一款棋盘游戏(Game object,Board object)
  2. 板由一组正方形(方形物体)组成
  3. 正方形可以标记为X或O.
  4. 两个玩家玩游戏(人类和计算机类实现玩家界面)
  5. 放置X或O后,GameEngine(GameEngine对象)决定游戏是否结束(抽奖或玩家赢了)或者它仍在
  6. 如果游戏仍然开启,则另一位玩家轮到他了.
  7. 对于计算机播放器,GameEngine会找出下一件作品的位置.

类的粗略草图.

 interface Player {
    Player takeTurn();
  void markNextBox();
  }
Run Code Online (Sandbox Code Playgroud)

.

 public class TicTacToeGameEngine implements GameRule{
@Override
public Boolean isWinner(Game game) {
        // Check winner logic
        return false;
}

@Override
public Square locateSquareToMark(Game game) {
    List<Square> squares= game.getBoard().getFilledSquares();
    //go through the list of squares and figure out a square to mark
    return square;
    }
 }
Run Code Online (Sandbox Code Playgroud)

.

  public class Computer implements Player { …
Run Code Online (Sandbox Code Playgroud)

java oop class-design

10
推荐指数
0
解决办法
1万
查看次数

有太多事件吗?

public class Human
{
    public void Run(){}
    public void Jump(){}
    public void Eat(){}

    //Generalized approach
    public EventHandler<HumanActivityProgressChanged> ActivityProgressChanged;
    public EventHandler<HumanActivityCompleted> ActivityCompleted;

    //Per-method approach
    public EventHandler<HumanActivityProgressChanged> Running;
    public EventHandler<HumanActivityCompleted> Ran;

    public EventHandler<HumanActivityProgressChanged> Jumping;
    public EventHandler<HumanActivityCompleted> Jumped;

    public EventHandler<HumanActivityProgressChanged> Eating;
    public EventHandler<HumanActivityCompleted> Ate;
}
Run Code Online (Sandbox Code Playgroud)

我有不同的方法来实现基于事件的异步模式.这些方法触发ProgressChangedeventargs和Completedeventargs.它们都触发相同的事件标记(如上面的代码所示).

每个异步方法提供一个事件是否有意义?或者只为所有异步方法提供一般化事件?是否存在太多事件?

c# events

9
推荐指数
1
解决办法
1405
查看次数

返回mutable与返回的不可变(非成员)对象

我几乎没有看到第二个用过,我想知道为什么?

  • 它也不会破坏NSArray预期的情况的支持(因为它是一个子类).
  • 它也不会通过揭示可变的内部结构来破坏封装.

在前提条件下,它永远不会是一个可变的ivar返回,(无论如何应该是常识)
我现在只能想到使用第二个的优点.

  • 它实际上可变的.静音在这里是安全的,为什么要防止呢
  • 无需调用[[[foo fooBar] mutableCopy] autorelease],不必要地分配额外的内存,不必要地浪费时间.

以下是方法变体:

- (NSArray *)fooBar {
    NSMutableArray *fooArray = [NSMutableArray array];
    //populate fooArray
    return fooArray;
}

- (NSMutableArray *)fooBar {
    NSMutableArray *fooArray = [NSMutableArray array];
    //populate fooArray
    return fooArray;
}
Run Code Online (Sandbox Code Playgroud)

我问,因为我的项目有一堆具有相同模式的方法.
并且在大多数情况下,返回的数组将在之后被修改(合并,编辑等).
所以我认为返回应该是完全没问题NSMutableArrays,但似乎没有人这样做.

NSMutableArray,NSMutableSet …

cocoa objective-c nsmutablearray

8
推荐指数
1
解决办法
1543
查看次数

在Scala/Lift中组织会话变量

想了解如何在scala/lift应用程序中最好地组织会话变量.

我已经在线阅读了许多scala资料,并且在所有引入会话变量的示例中都发现了以下范例:

  1. 声明一个扩展SessionVar类的对象
  2. 将该对象放入包含片段(或任何文件)的文件中
  3. 从代码库中的任何位置访问该对象(提升将根据用户的http会话的生命周期来处理会话var的生命周期)

也许我不理解某些东西,但我担心这种方法会导致各种文件中的一大堆这些对象到处都是.如果它是一个小应用程序,它不是一个大问题,但当一个项目变大,这可能会导致混乱.

对于那些从事大型scala项目的人来说,是否有一种普遍接受的更好的方法?(即使它的简单内容就像将所有这些对象放入一个公共文件一样?)

谢谢.

scala lift session-state

7
推荐指数
1
解决办法
718
查看次数