我曾经是jQuery(及其一些小插件)的用户.我多年来开发的Javascript代码最好被描述为......凌乱.它在这里和那里使用了大量的全局变量和函数,没有使用组织代码的标准方法,也没有使用任何设计模式.
我目前正在构建一个新版本的网站,我已经完成了与PEAR :: MDB2和Smarty模板的后端.剩下的就是自制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.我真的不知道该怎么办......我知道的事情:
现在,我使用jQuery和jQuery Tools,并使用简单的属性和方法在一个简单的命名空间/对象文字中"组织"所有这些,并且,由于网站已本地化,我只是计划使用简单的vsprintf(就像我一样)在后端)使用键:从后端提供的对象文字加载的值对.JavaScriptMVC似乎很有趣,但我担心这会给规模相当小的项目带来太多的复杂性.这是我需要你的建议的地方!非常感谢你提前.
我有一个像臭的方法:
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不同,所以我不能简单地迭代它们)
我正在尝试编写一个侦听套接字,stdin和从文件描述符读取的unix客户端程序.我将每个任务分配给一个单独的线程,并使用同步队列和信号量成功地与"主"应用程序通信.问题是,当我想关闭这些子线程时,它们都会在输入时阻塞.此外,线程无法在线程中注册信号处理程序,因为在Python中只允许执行主线程.
有什么建议?
假设我有一个类Comment,我有一个名为commentDate的私有字段,它是一个java.util.Date,并带有一个名为getCommentDate的getter .
为什么最好返回该日期的副本(返回新日期(commentDate.getTime()))而不是简单地返回该日期...
用户如何更改该Date的对象状态,因为它是getter而不是setter?
更新:因为我马上就需要一些东西,所以我创建了一个简单的着色器包装器来完成我需要的东西.你可以在这里找到它: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) 我正处于Web应用程序的设计阶段,该应用程序允许用户创建工作请求,工作人员可以根据这些请求投入时间.该应用程序还将为主管提供报告功能,以获取每日总计,报告和帐户所花费的时间,"成本分配".
我过去使用的应用程序是使用逐层方法设计的.我认为通过功能设计使用包会更有效率,我对这个设计有疑问.
我目前正在考虑的功能包:
前端将是Tomcat服务器和JSP.而且,后端将是一个Oracle数据库,EclipseLink执行持久性.
我的问题:
根据我对逐个包的理解,实体和DAO将进入与它们相关联的包.在多个包中展开持久层.将包从其他包中调用实体.所有的重叠是否真的有用?包之间没有隔离.使用打包功能有什么优缺点?使用额外的持久层是否是一个好的设计?或者,我是否完全理解这一点?
这是一个面试问题.
使用面向对象原则设计一个tic tac toe.采访者说他对逻辑不感兴趣,他只想要设计.我给出了如下设计,但我并不完全满意.如果有任何建议/改进,请告诉我.
面试官对两件事非常讲究
我的方法:
类的粗略草图.
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) 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)
我有不同的方法来实现基于事件的异步模式.这些方法触发ProgressChanged
eventargs和Completed
eventargs.它们都触发相同的事件标记(如上面的代码所示).
每个异步方法提供一个事件是否有意义?或者只为所有异步方法提供一般化事件?是否存在太多事件?
我几乎没有看到第二个用过,我想知道为什么?
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 …
想了解如何在scala/lift应用程序中最好地组织会话变量.
我已经在线阅读了许多scala资料,并且在所有引入会话变量的示例中都发现了以下范例:
也许我不理解某些东西,但我担心这种方法会导致各种文件中的一大堆这些对象到处都是.如果它是一个小应用程序,它不是一个大问题,但当一个项目变大,这可能会导致混乱.
对于那些从事大型scala项目的人来说,是否有一种普遍接受的更好的方法?(即使它的简单内容就像将所有这些对象放入一个公共文件一样?)
谢谢.
java ×3
c# ×1
class-design ×1
cocoa ×1
events ×1
frameworks ×1
glsl ×1
idioms ×1
ios ×1
javascript ×1
jquery ×1
lift ×1
objective-c ×1
oop ×1
opengl ×1
packaging ×1
python ×1
ruby ×1
scala ×1
wrapper ×1