作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用erlang,mnesia和webmachine建立一个网站。我阅读的大多数文档都赞扬具有参照透明功能的优点。
问题是,所有数据库访问都是外部状态。这意味着,任何命中数据库的方法都不再是参照透明的。
可以说我在数据库中有一个用户对象,还有一些用于身份验证的函数。
参照不透明函数可能看起来像:
handle_web_request(http_info) ->
is_authorized_user(http_info.userid),
...
%referentially opaque
is_authorized_user(userid) ->
User = get_user_from_db(userid),
User.is_authorized.
%referentially opaque
lots_of_other_functions(that_are_similar) ->
db_access(),
foo.
handle_web_request(http_info) ->
User = get_user(http_info.userid),
is_authorized_user(User),
...
%referentially opaque
get_user(userid) ->
get_user_from_db(userid).
%referentially transparent
is_authorized(userobj) ->
userobj.is_authorized.
%referentially transparent
lots_of_other_functions(that_are_similar) ->
foo.
最佳答案
为什么不完全采用参照透明性?
考虑get_user_from_db
的定义。它如何知道如何与数据库对话?显然,它假设一些(全局)数据库上下文。您可以更改此函数,以便它返回一个以数据库上下文为参数的函数。你拥有的是...
get_user_from_db :: userid -> User
get_user_from_db :: userid -> Database -> User
Database
将是句柄,数据库连接对象或其他对象。为了进行测试,请为其提供一个模拟数据库。
关于functional-programming - 我应在多大程度上采用参照透明性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772104/
我是一名优秀的程序员,十分优秀!