M*****R 发帖数: 650 | 1 C++是没有Reflection啊,RTTI还差点老远。
Reflection对Java太重要了,从C++过来的人,好多都没听说过什么叫DI,AOP, etc.
更没有想过在C++里哼哧哼哧自己实现的一些Design Pattern,用Java的一些framework
,几行就解决了。 |
|
z****e 发帖数: 54598 | 2 现在aop+nosql这个对于非重要的数据,尤其是log
可以做到非侵入性编程,单独出来成为一个模块
硬生生滴割断各个模块之间的耦合
巨强
framework |
|
z****e 发帖数: 54598 | 3 应该如此,我一直主张aop+nosql做log
很爽 |
|
w**z 发帖数: 8232 | 4 spring di and aop are really nice. |
|
z****e 发帖数: 54598 | 5 给捧fp的留点面子罢了
最后定位可能会比aop好点
但是怕是好不了太多 |
|
z****e 发帖数: 54598 | 6 你怎么知道我没有?
我玩multiple paradigm也不是一天两天了
没看到我举的aop的例子?
又不是只有fp一个可以自称是paradigm
互相之间做补充,这个我没有意见
但是就像你学delphi的问题一样
要区分清楚互相之间的界限
不要把两个paradigm凑在一起用
这样只能是灾难,互相之间会因为风格不同而吵架
猴屁股举过c++程序员做大系统时候的各种争论
本质都是在paradigm不同引发的 |
|
z****e 发帖数: 54598 | 7 把其应用限制在某一个领域里面
就像我们只用aop做验证还有log领域一样
效果应该还是可以的
其实宣告式里面logic programming更有前途 |
|
z****e 发帖数: 54598 | 8 我们假设会喜欢函数式编程的有小学以上文化程度
否则我们会建议它们用oop
fp不是万能的,fp乱用会带来灾难,所以应该把fp的使用限制在某一个领域内
就像aop一样 |
|
z****e 发帖数: 54598 | 9 fp和oop并不对立
就像aop和oop也不对立一样
但是有轻有重,有所取舍,切割开不同风格程序猿之间的领域
什么时候用什么,不要混在一起用
否则下面的程序猿会因为风格的问题而吵架 |
|
z****e 发帖数: 54598 | 10 其实我不认为把市场定位在让oo programmer转型会成功
反倒是定位在象aop一样,在某些场合,作为oop的补充
但是不替代oop在系统中主流位置,也就是不做first citizen
做second citizen的话,会很成功
java |
|
z****e 发帖数: 54598 | 11 其实我不认为把市场定位在让oo programmer转型会成功
反倒是定位在象aop一样,在某些场合,作为oop的补充
但是不替代oop在系统中主流位置,也就是不做first citizen
做second citizen的话,会很成功
java |
|
z****e 发帖数: 54598 | 12 【 以下文字转载自 Java 讨论区 】
发信人: zhaoce (米高蜥蜴), 信区: Java
标 题: Re: 检讨并分享一下工作中出现的各种错误
发信站: BBS 未名空间站 (Mon Nov 4 01:03:01 2013, 美东)
不过每次处理log,我都会感慨,aop要是被用上了
将会多么简单 |
|
|
|
z****e 发帖数: 54598 | 15 我选择各种p只有一个目的
代码分离
只要能实现代码分离的p就是好p
否则,人一多,很容易起冲突
最好的p就是你写你的,我写我的,别互相干扰
你用你的p,我用我的p
所以我一直都比较欣赏aop
因为不会对各种现有流程代码造成不必要的侵入和破坏 |
|
z****e 发帖数: 54598 | 16 aop最常见的就是拦截方法的调用
然后获取方法传入的参数,然后存到log里面去,以备将来查询
举个例子,假设for也是一个函数
那么当我for(int i:list)的时候,切面设在这里,然后把list拦截到
放到log里面去,我将来查log时候就可以看到list里面是什么
你的while里面只有i,我拦截了有什么意义?只能看到size
code |
|
z****e 发帖数: 54598 | 17 那这种其实没用,不是jcp,爱怎么折腾就怎么折腾
jcp内部对于java是有严格规定的,很多features都是因为jcp觉得有trade off
而且trade off太大,所以否决了提议,比如fp的不少features
关键是python是语言版本内部升级都无法统一意见
那这个很麻烦,分支可以瞎搞,比如java的aop还自定义了语法
但是主流不要乱搞,主流乱搞,那没有办法接受的 |
|
z****e 发帖数: 54598 | 18 我知道是oo,问题在于你不能挡住别人当脚本来用
java是强制oo,python是非强制的oo,所以oo反而容易变成一种附庸
不象java一样,因为强制oo,所以oop一定当家,其它的,像aop什么,就成了附庸 |
|
c*******9 发帖数: 9032 | 19 这要看你做什么事情,像黑客程序不需要多少design pattern。而大型应用程序没
design pattern就一团mess了。
MFC也不适合大程序,编小程序容易,一复杂就不行了。当然,有些人就喜欢在混乱中
找条理(这些人脑子里其实也有些pattern),但不是所有人都这样,没有design
pattern也难以合作。fp编程对传统design pattern依赖也小了,是因为fp本身的逻辑
很清晰,其实已经把
design pattern融汇贯通了,不需要明显提出来。比如haskell的一些monad,就和
decoration pattern,AOP起类似作用。 |
|
z****e 发帖数: 54598 | 20 然
dp其实只是实践的起步
真正的后续是通过发布dp实现的类库
并推广这个类库
最后在大规模流行之后,将这个dp制定成标准发布
强行要求所有人遵守,这才是整个流程的最后一步
aop和fp其实都没有实现最后标准化那一步
群众排斥太强烈,实际上很多人也的确不知道这两个东西 |
|
z****e 发帖数: 54598 | 21 mongodb把index全部读入内存
对于log有必要么?
是我就全部扔给cassandra去做
cassandra很简单的,不比mongodb难
我现在是aop+cassandra,轻轻松松
wwzz还有古德霸他们也都有用cassandra做log |
|
c******o 发帖数: 1277 | 22 要想拿到FP最好的一面,确实要pure, pure FP根本不学要担心耦合/封装/dependency/
AOP
all non issue, no side effect, highly abstract, highly polymorphic根本从开始
就把这些东西都解决了。
但是pure FP 产生了一大堆IO/ST方面的麻烦和问题,最后只好在这边打补丁。。。搞
的编个程序,pattern比要解决的问题还麻烦。
现在我觉得还是自己掌握好,需要啥用啥。 |
|
c******o 发帖数: 1277 | 23 那么少到哪一个就不是oo 了呢?
很多人现在不用inheritance,那还是不是OO 呢?
其实AOP是break encapsulation的。
polymorphism这十几年方法也改的不少。
你要是看看各种定义,OO真没有什么精确的定义。object就不好定义。
FP倒是有精确的没有歧义的定义。
这个不是大问题,但是也说明OO其实是个筐,什么都往里装。 |
|
c*******9 发帖数: 9032 | 24 估计你主要做网站。很多应用是难找合适库的。程序员找库不浪费时间。
说flexible难有比像Lisp这样有的eval的了。动态改程序,数据还不够flexible。
monad不是为了仅仅为了immutable,也容易实现AOP。不熟悉的人觉得别扭,一旦熟悉
,没有比这更好用的了。
flexible |
|
g*****g 发帖数: 34805 | 25 spring is a swiss army knife nowadays. ioc and aop are like knife and
scissors. |
|
l*******n 发帖数: 373 | 26 其实软件工程最重要的理念是separation of concerns.
具体到架构就是SOA,micro services,具体到apps就是UNIX着名的single
responsibility,具体到FP就是side-effect-free, input/output only programming
,具体到AOP,dependency injection,cake pattern,无一不是separation of
concerns的体现。
还有着名的SOLID五条理念,基本全部在强调separation of concerns。这个精神抓
住了,具体怎样实现,用什么语言,用什么paradigm,大可商榷。 |
|
n****1 发帖数: 1136 | 27 我看用动态语言去写类库, 最后还要被Spring IOC 调用运行才是吃饱了撑的。 不仅
被框架限制得死死的, 而且类库代码量巨大, 容易出runtime bug, 简直把两者缺点
集于一身了。 至少我个人是不敢用别人用动态语言些的类库。
只要动态语言有了控制权, 就可以实现一个Adhoc monad transformer. 这样不仅轻松
实现AOP(Transformer)/async(Continuation)等等, 还能做到composable library, 就
像SOA里面的composable service一样。 如果能够用applicative functor做
composition,还能自动把单线程的库做到并行运行。 总之FP里面那些fancy的东西都可
以往上套。 This is the whole point of glue code.
还是那句话,Spring是别人的魔法, 有时候还是自己来控制更好。
当。 |
|
n****1 发帖数: 1136 | 28 I think we are finally on the same page now.
Spring beans can be consumed by Spring IOC Framework, as well as dynamic
language. But not at the same time.
That is why I stated "In order to be useful, dynamic language need to get
rid of Spring IOC at the first place, no matter how good spring IOC is".
And at the same time, dynamic language can integrate those 3rd-party, non-
bean classes/libraries easily, instead of adding "@"s to others' code.
Sometimes you even don't have access to source code o... 阅读全帖 |
|
z****e 发帖数: 54598 | 29 这人一看就是高手
比你们讨论nodejs的强一万倍,这才是帅才啊
它在说战略该怎么操作
讨论nodejs好不好的着眼点太低了
都在讨论mp5好还是ak47好
发信人: lscorpion (蝎子), 信区: Programming
标 题: Re: 给Java/Spring说几句好话
发信站: BBS 未名空间站 (Fri Jan 3 10:10:33 2014, 美东)
其实软件工程最重要的理念是separation of concerns.
具体到架构就是SOA,micro services,具体到apps就是UNIX着名的single
responsibility,具体到FP就是side-effect-free, input/output only programming
,具体到AOP,dependency injection,cake pattern,无一不是separation of
concerns的体现。
还有着名的SOLID五条理念,基本全部在强调separation of concerns。这个精神抓
住了,具体怎样实现,用什么语言,用什么paradigm,大可... 阅读全帖 |
|
z****e 发帖数: 54598 | 30 fp也是一种paradigm啊
我觉得很多程序员paradigm弄多了真的不行
思维方式不一样,太经常转变思维会神经错乱的
同一个组内部我坚决反对用不同的paradigm搭配
如果有不同的paradigm需求,分开不同的组去做
比如支持的组用aop蛮好
对于gc这事,我记得买买提上一度有一种风潮
不少c++程序员开始关注jvm,决定挑战一下高难度
问我意见,我直接回邮件,openjdk,去看吧
然后……
目测是没有然后了
至少我没看到什么像样的东西出来 |
|
z****e 发帖数: 54598 | 31 c++本身到底是什么paradigm有定论么?
它自己说是oop,但是一堆人写成了其他各种乱七八糟的paradigm
java倒是比较纯粹的oop,要做aop或者fp这些你要做点额外的操作
所以这样可以防止一般的java程序员滥用其他的p
paradigm只是一种手段,不是目的啊
多种paradigm我主要不明白为的是实现什么目的? |
|
z****e 发帖数: 54598 | 32 专业一点就是paradigm了
java就是最接近纯粹oop的impl语言
其他语言有各自的定位
比如haskell是fp之类的等等
那从一个人使用语言的角度出发
越纯粹的paradigm越好
paradigm如果混用,哪怕只有两个
都会造成非常可怕的后果
就是各自表述,互相之间会冲突
例子?
c++和scala都是如此
c++是procedural programming(pp)和oop还有其他p的混杂
c++自己说自己是oop,其实扯淡,无数的人写成了pp
scala则是oop和fp的混杂
fp本身的历史很不堪,就跟小菊花说的那样
fp在oop以前造成了灾难性的后果
所以才有了oop的推广,最初几次oop的尝试都取得了一定的进展并发展到现在
你今天学的四人帮的最常见的design pattern那本书
里面就用smalltalk, c++和java做例子
smalltalk就是oop最初的impl
所以
第一,多个paradigm混杂所带来的后果是灾难性的
其次,某些paradigm本身就很不堪
比如fp
所以oop至少可以说是目前为止,少数得到大多数人接受的paradigm
所以... 阅读全帖 |
|
z****e 发帖数: 54598 | 33 当然说要100%只用一个p,有一定难度
但是尽量保持纯净性
java是这么做的
首先java保证自己是一个oop
其次,通过增加一些相对高级的类库
来添加其他的p
比如aop,你不用aspectj或者spring或者app server的话
是没有办法用的,而你如果主动去download这些东西的话
你应该知道自己在做什么
再比如reflection,也就是mpp
那这个大多数时候,不是常见的功能
而且学习有一定难度,很多人甚至搞不懂为什么要reflection
更谈不上使用,所以通过这种方式有效地控制了低级程序员乱搞
而c++和scala则基本上不存在这种控制
c++如果涉及到一些底层编程的话,那还有另外一种p
那就是imperative programming(ip)就有点汇编那种感觉
总之到底是什么p,弄到最后你也不知道是什么p
p就好比是一只军队的战斗纪律,如果战斗纪律混乱的话
那就意味着战场上士兵会有收到多个命令
肯定会乱,士兵一乱,等着死吧 |
|
g*****g 发帖数: 34805 | 34 Start with these Spring Core(IOC, AOP), Spring MVC, Hibernate, SQL, Jersey. |
|
z****e 发帖数: 54598 | 35 多大的数据2ms?
我刚试了下,~1.3ms
不过我不要求什么一致性
完全就是log,所以aop截取到之后就扔进去
也不update什么的,所以没啥特别复杂的东东
你还是实际测一下好 |
|
z****e 发帖数: 54598 | 36 spring本身就是简化版的ejb
spring最大的成就应该是ioc
aop都不算是spring的咚咚,以apsectj成就更高点
现在j2ee container也都有ioc了
而且spring本身也在朝着又大又全的方向去发展
这两者之间的界限已经很模糊了
vmware和red hat其实要真比起来,还是red hat靠谱点 |
|
z****e 发帖数: 54598 | 37 不用,有更简单的
vert.x搞明白了比spring更管用
vert.x插件什么都有,ioc, aop, script, orm...
其实我不是很赞同搂主对于二爷的看法
二爷对heavyweight的东西不是很了解,这个显然搂主是内行
但是二爷对lightweight的产品的了解值得学习 |
|
z****e 发帖数: 54598 | 38 类型肯定是强类型,dart和swift都推荐强类型
dart对js的效率很不满意,就是因为类型本身无法固定,导致优化效率偏低
而且脚本可读性太差,不可能用来写app
其次,花括号要保留,python这个做得很糟糕
但是python比较好的就是tuple
一个方法可以返回多个变量,这个功能挺管用
还有就是[] {}这种直接简洁型的定义方式
这个也挺好用,dart和swift都多少抄袭了python的这两个features
swift抄袭得很彻底,几乎照搬python的
最后就是oop部分,这个java做得最好,这已然是一个标准
dart和swift都直接照搬了这个部分,目前看,没有照搬的只有
set/get方法,这个无所谓,不做aop的话,这个没有什么大用
其他class的定义,reference这些都是照抄java的
swift抄得更彻底,enum也抄了
然后dart和swift的closure也都跟java的一样,好哦
这样我开发app的所有的需求,apple和google都满足我了
至于web,那个不管,web server将来只会更简单,不会更难
web server背后的app... 阅读全帖 |
|
c******o 发帖数: 1277 | 39 功能上,AOP可以很方便的用functional language实现,但是两个不一样。 |
|
g*****g 发帖数: 34805 | 40 其实MarinSR总结得很好。
Java SE: Core Java, 非AWT的部分,Swing可以了解一下。
Multithread: Java Concurrency in Practice 这本书比较难,但对中高级程序员和面
试有用。
Java EE: Spring MVC, Spring core (IOC+AOP), Hibernate (or Spring data).
这三个架构是企业应用里最具代表性的3层架构,我以前读过spring in action,
hibernate in action,那是大约10年前了,可能有更好的书。
接下来常用的utility类库是Google Guava, Apache commons. Rest类库Jersey.
熟悉这些做个合格的java程序员够了,接下来就是根据你的方向去熟悉相关类库了。外
延的东西太多,用不到的学了也记不住。 |
|
g*****g 发帖数: 34805 | 41 Spring is now a swiss army knife and it is a bundle of frameworks. Without
context it's usually referring to Spring core which consists of IoC and some
utility classes, and Spring AOP, this provides what you need for the
service layer support in a J2EE architecture without the need of a J2EE
server. Hibernate is an ORM framework which provides persistence layer
support layer support without a J2EE server. Spring Data is similar to
Hibernate. Spring and Hibernate can run in and out of any contain... 阅读全帖 |
|
z****e 发帖数: 54598 | 42 不冲突
spring最重要的是ioc和aop,5分钟就能搞懂ioc
至于spring data,本质上跟hibernate这些是一回事
用法稍微有些不同而已,spring各个components凑一起
可以说是jee的非标准化实现,hibernate更为标准一点
但是spring data也同样遵照了jta,所以在某些方面用起来不会有区别
另外spring也可以很容易地跟hibernate这些框架集成
java就这样,任何一个component都有三个以上的东西在竞争
不象其他语言,一个领域基本上就那么一个东西可以用
当你觉得不爽了,要换framework,连同语言都要换
java至少能保证你不需要换语言,这样可以降低学习成本
尽早脱离语言这个level,去思考一些更为不那么繁琐的事情 |
|
g*****g 发帖数: 34805 | 43 想学架构的话,你可以看看spring security. spring最核心的是core和aop. |
|
s****y 发帖数: 503 | 44
这些框架的都离不开反射
Spring的AOP和动态代理的原理差不多 |
|
r***y 发帖数: 4379 | 45 赞分享
类似 logging level 啥的也是用 aop 控制? |
|
H****S 发帖数: 1359 | 46 大部分依赖冲突都是版本冲突,sbt都可以自动resolve成最新版本。log4j和logback属
于不同的library,但是都要access logging system,所以实际中有时让人很困惑。建
议用log4j over slf4,一劳永逸。用aop还要上java agent,感觉有点overkill。 |
|
z*******3 发帖数: 13709 | 47 但是很多lib的新版本的api根本不兼容低版本的api
这种事情遇到过很多次,你更新到最新版本的话
有些依赖旧版的lib直接抛错,有些api被直接删掉了
当然拆开改掉,然后再打包也不是不可以,但是这就麻烦么
这个问题是大项目中不可回避的一个主要问题
aop的好处就在于,如果你用了spring,这个天然就在
而且代码就那么点,可以log一堆代码,何乐而不为? |
|
r*******e 发帖数: 971 | 48 1 我理解Java Spring MVC所谓的依靠注入,主要原因是因为java支撑的服务器只会编
译一次,因此绝大多数的对象(内存代码)都只能在运行时用反射机制建立。由于建立
对象所需的数值在运行时才存在,于是spring中需要Bean这个抽象容器描述对象,在运
行时注入具体参数建立对象。
2. Spring用Annotation Driven的主要意义是减少代码量。
3. Spring MVC的主要优点是运行效率高(相对Python Ruby PHP)
在Net I/O 密集与CPU 密集的场合都有很好的表现(不见得是最好)
方便分工协作。
缺点,太抽象,很难懂。没法热调试。
我的想法对么?
然后AOP (aspect oriented programming) 到底啥么意义?? |
|
z*******3 发帖数: 13709 | 49 mvc
di
aop
包括
annotation
都不是一个概念
不要互相混
你把这些概念全部混淆了 |
|
z*******3 发帖数: 13709 | 50 mvc是pattern
di是pattern
aop是paradigm
annotation是metadata form |
|