在我作为开发人员的工作中我必须解决的大多数问题都与数据建模有关.例如,在OOP Web应用程序世界中,我经常需要更改对象中的数据属性以满足新的要求.
如果我很幸运,我甚至不需要以编程方式添加新的"行为"代码(函数,方法).相反,我可以通过注释属性(Java)来声明添加验证甚至UI选项.
在函数式编程中,由于模式匹配和数据构造函数(Haskell,ML),添加新数据属性似乎需要大量代码更改.
如何最大限度地减少此问题?
这似乎是一个公认的问题,因为Xavier Leroy在"对象和类与模块"的第24页很好地说明 - 总结那些没有PostScript查看器的人,它基本上说FP语言比OOP语言更好地添加新的对数据对象的行为,但OOP语言更适合添加新的数据对象/属性.
FP语言中是否有任何设计模式可以帮助缓解此问题?
我已经阅读了Phillip Wadler 建议使用Monads来帮助解决这个模块化问题,但我不确定我是怎么理解的?
有没有人在Netty之上构建了一个Servlet API实现?我很想建立自己的,因为我不能谷歌实施.
基本上我想支持足够的球衣工作(希望球衣不做任何线程局部的东西).
是否有一种语言可以编译为Java代码(不是字节代码而是Java ..所以没有Groovy,Scala,Jython,JRuby等)?
换句话说,有一个CoffeeScript for Java?
我对Java的一个主要缺点就是它非常冗长,并且它没有多重继承.似乎可以合理地通过代码生成来清理语法add mixins/traits和closures.
是的它不优雅,但coffeescript做到了.
我经常需要分叉一个使用Maven的Java项目(通常在github上).
当我分叉项目并进行更改时,我通常希望将一个版本剪切到我自己的私有(但在互联网上)maven存储库.
因此,我的自定义版本应该是什么版本标签的问题.我不能这样做,SNAPSHOT因为我需要它才能成为一个版本.有时我用项目后缀.ADAMGENT(因为我是一个自恋者).让我说我叉1.0.4-SNAPSHOT.我可以改成它1.0.4.ADAMGENT.我不知道这是不是一个好主意.在某些情况下,我甚至不能使用.ADAMGENTSpring的Gradle构建工具不喜欢它.所以对于我做的Spring项目.ADAMGENT.RELEASE或者.ADAMGENT.M1它是一个里程碑.
其他人做什么?
更新: 虽然我说fork我更多的补丁程度更改.另一方面,赏金(由不同的用户)可能是用于分叉和/或补丁
有没有人在Java中看过一个例子或做过以下内容:http: //duganchen.ca/single-page-web-app-architecture-done-right/
这是一个设计单页面的网络应用程序,它将使用谷歌搜索引擎优化与大量违反使用Java技术的DRY?
我自己做这个似乎并不难,但我很好奇(并且懒惰)看看有人已经用Spring或JAX-RS完成了它.
具有某种反射/内省规范的语言的巨大好处之一是可以从各种来源自动构建对象.
例如,在Java中,我可以使用相同的对象来持久化到db(使用Hibernate),序列化为XML(使用JAXB),以及序列化为JSON(json-lib).您可以在Ruby和Python中执行相同的操作,通常也遵循一些简单的Java属性或注释规则.
因此,我不需要很多"域转移对象".我可以专注于我正在工作的领域.
它似乎在像Haskell和Ocaml这样非常严格的FP中,这是不可能的.特别是Haskell.我唯一看到的是进行某种预处理或元编程(ocaml).只是接受你必须从底部向上进行所有转换吗?
换句话说,您必须做很多无聊的工作才能将haskell中的数据类型转换为JSON/XML/DB Row对象,然后再转换回数据对象.
似乎最新的JAX-RS可以处理将java.util.List作为XMLRootElement返回的方法,但普通的JAXB不能.我想模仿CXF和泽西岛正在做什么.
换句话说,我想列出一个名单,就像CXF和泽西岛一样.通常,如果您尝试使用JAXB封送列表,则会获得根元素异常.如何在不必制作包装物的情况下解决这个问题?
编辑:感谢您的答案,但我对@XmlElementWrapper非常熟悉,但这甚至不能模拟JAX-RS正在做的事情.
JAX-RS执行此操作:
@XmlRootElement(name="dog")
public class Dog {
private String name;
public String getName() { return this.name; }
//Setter also
}
Run Code Online (Sandbox Code Playgroud)
现在如果我序列化狗列表:
serialize(List<Dog> dogs);
Run Code Online (Sandbox Code Playgroud)
XML应该是(JAX-RS所做的):
<dogs>
<dog><name>Rascal</name></dog>
</dogs>
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我不想为每个域对象创建一个包装器对象.
使我无法定期使用Akka(使用Java)是我对使用ThreadLocals的库的一个担忧.
这就是我认为一些Akka Dispatchers可能会导致ThreadLocal变量被遗忘,或者一起丢失.所以显而易见的解决方案是避免使用ThreadLocals但是有很多库使用它们:Spring,Wro4j,Log4j等等......
ThreadLocals通常在Servlet容器中正常工作.这是因为即使容器有线程池,请求主要是一个同步生命周期,因此通常在请求结束时,像Spring和Wro4J这样的东西会清除那里的threadlocals.像Tomcat这样的容器甚至可以监控线程局部泄漏.
根据我的理解,Akka的情况并非如此.
人们如何解决这个问题?
现在我只是避免使用Akka并使用Message Queue(如RabbitMQ或ActiveMQ),但想使用Akka,因为它涵盖了更广泛的异步问题/解决方案.
我也认为Netty有类似的问题,但我相信Netty提供了一些可用于代替ThreadLocal的Channel Context对象,理论上一些库可能知道使用它而不是ThreadLocal.
Java问:我喜欢CSS用于简单的网页,但是当涉及现实世界的网站时,它会厌恶它,因为你得到了css爆炸和大量的重复.
我很想使用Sass和Compass,但它们是Ruby程序,很可能需要一些有趣的Maven + JRuby才能为Java Web app dev工作.如果您使用Eclipse或支持与正在运行的Web应用程序同步的任何IDE,这也会很困难.
对于地狱中的CSS,还有一个更好的替代方案是Java吗?
我正在尝试为我的Web应用程序创建请求日志.我使用Spring 3. 0.
我实现了一个扩展类,HandlerInterceptorAdapter并使用它preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)来拦截请求.
在方法中,我希望能够记录请求体(我的参数是XML中直接写入请求体的对象),并且我使用 request.getReader();
问题是 - 稍后我会IllegalStateException在弹簧控制器尝试读取请求时得到一个.
有办法做我想做的事吗?
java ×7
haskell ×2
ocaml ×2
akka ×1
backbone.js ×1
coffeescript ×1
css ×1
httprequest ×1
javascript ×1
jax-rs ×1
jaxb ×1
jruby ×1
maven ×1
maven-2 ×1
mustache ×1
netty ×1
nio ×1
oop ×1
sass ×1
servlets ×1
singlepage ×1
spring-mvc ×1
thread-local ×1
versioning ×1