标签: abstraction

摘要远离Clojure中的数据结构实现细节

我正在Clojure中开发一个具有多个子结构的复杂数据结构.

我知道我会想要随着时间推移扩展这个结构,有时可能想要改变内部结构而不会破坏数据结构的不同用户(例如我可能想要将一个向量更改为一个hashmap,添加某种索引出于性能原因的结构,或者包含Java类型)

我目前的想法是:

  • 使用各种访问器方法为整体结构定义协议
  • 创建一个导航数据结构的迷你函数库,例如(query-substructure-abc param1 param2)
  • 使用defrecord或deftype实现数据结构,并使用定义的协议方法来使用迷你库

我认为这会有效,但我担心它开始看起来像很多"胶水"代码.它也可能反映了我对面向对象方法的更多熟悉.

在Clojure中推荐的方法是什么?

encapsulation abstraction clojure data-structures

14
推荐指数
1
解决办法
804
查看次数

委托会员超过经典功能有哪些优点或缺点?

class my_class
{
    public int add_1(int a, int b) {return a + b;}
    public func<int, int, int> add_2 = (a, b) => {return a + b;}
}
Run Code Online (Sandbox Code Playgroud)

add_1是一个函数,而add_2是一个委托.然而,在这种情况下,代表们可以填补类似的角色.

由于先例和语言的设计,C#方法的默认选择应该是函数.

然而,这两种方法都有利有弊,所以我已经制作了一份清单.这两种方法都有任何优点或缺点吗?

传统方法的优点.

  • 更常规
  • 函数的外部用户看到命名参数 - 对于add_2语法arg_n和类型一般不够信息.
  • 使用intellisense-ty Minitech可以更好地工作
  • 适用于反射 - ty Minitech
  • 与继承合作 - Eric Lippert
  • 有一个"这个" - ty CodeInChaos
  • 更低的开销,速度和内存 - ty Minitech和CodeInChaos
  • 在更改和使用函数方面,不需要考虑public\private. - ty CodeInChaos
  • 动态性较低,允许在编译时不知道的少 - ty CodeInChaos

"委托类型字段"方法的优点.

  • 更一致,而不是成员函数和数据成员,它只是数据成员.
  • 可以向外看,表现得像变量.
  • 将它存放在容器中效果很好.
  • 多个类可以使用相同的函数,就好像它是每个成员函数一样,这将非常通用,简洁并且具有良好的代码重用.
  • 直接在任何地方使用,例如作为本地功能.
  • 可能在垃圾收集传递时效果很好.
  • 更动态,在编译时必须知道的更少,例如,可能存在在运行时配置对象行为的函数.
  • 就像封装它的代码一样,可以组合并重新编写,msdn.microsoft.com/en-us/library/ms173175%28v = vs.80%29.aspx
  • 该函数的外部用户可以看到未命名的参数 - 有时这是有用的,尽管能够命名它们会很好.
  • 可以更紧凑,在这个简单的例子中,例如可以删除返回,如果有一个参数,也可以删除括号.
  • 滚动你自己的行为,如继承 - ty …

c# delegates abstraction class function

14
推荐指数
1
解决办法
5526
查看次数

即使只是语法糖,模块化SQL

有没有办法模块化SQL代码,以便更具可读性和可测试性?

我的SQL代码经常变成一系列复杂的嵌套连接,内部连接等,难以编写且难以调试.相比之下,在诸如Javascript或Java之类的过程语言中,人们会将离散元素作为单独的函数来捏合,这些函数将按名称调用.

是的,可以将每个查询作为完全独立的查询,存储在数据库中或作为存储过程编写,但通常我不想更改/混乱数据库,只是查询它很好,特别是如果DBA不希望授予所有用户写入权限.

例如,从概念上讲,复杂查询可能很容易用伪代码描述,如下所示:

(getCustomerProfile) 
left join 
(getSummarizedCustomerTransactionHistory) 
using (customerId) 
left join
(getGeographicalSummaries) 
using (region, vendor)
...
Run Code Online (Sandbox Code Playgroud)

我意识到从理论上看有很多关于这个主题的文章(下面的几个链接),但我只是想找到一种方法来使代码更容易正确编写,并且一旦编写就更容易阅读.也许只是语法糖来从视觉中抽象出复杂性,如果不是从执行中,那么在我试图不看的文字SQL中编译.类推...

  • 手写笔:CSS ::
  • CoffeeScript:Javascript ::
  • SAS Macro语言:SAS语言::
  • :SQL

如果特定的SQL风格很重要,我的大部分工作都在PostgresQL中.

http://lambda-the-ultimate.org/node/2440

SQL中的代码重用和模块化

数据库和功能编程是否存在争议?

sql abstraction

14
推荐指数
1
解决办法
2750
查看次数

CommonJS中"承诺"抽象的好处是什么?

我正在阅读这篇文章,关于承诺抽象的部分对我来说似乎有点过于复杂.以下是一个例子:

requestSomeData("http://example.com/foo") // returns a promise for the response
    .then(function(response){ // ‘then’ is used to provide a promise handler
        return JSON.parse(response.body); // parse the body
    }) // returns a promise for the parsed body
    .then(function(data){
        return data.price; // get the price
    }) // returns a promise for the price
    .then(function(price){ // print out the price when it is fulfilled
        print("The price is " + price);
    });
Run Code Online (Sandbox Code Playgroud)

在我看来,以下可以用更少的代码行提供相同的结果:

requestSomeData("http://example.com/foo")
    .requestHandler(function(response){
        // parse the body
        var data  = JSON.parse(response.body);

        // …
Run Code Online (Sandbox Code Playgroud)

javascript abstraction commonjs promise

13
推荐指数
1
解决办法
6133
查看次数

隐藏数据类型的构造函数

导入某些数据类型时,需要将(..)用于导入构造函数.

是否可以阻止导出某些数据类型的构造函数,即使导出该数据类型也是如此?

haskell abstraction module interface

13
推荐指数
1
解决办法
1759
查看次数

命令模式似乎不必要复杂(我不明白的是什么?)

我已经阅读了命令模式,我想我错过了一些东西.Command对象的存在是为了抽象出Receiver对象的细节.在我看来,我们可以简单地停在这里,并保持对Command对象的引用,以在适当的时间执行适当的方法.

那么,为什么需要Invoker呢?这种额外的间接提供了什么优势?我们已经隐藏了命令后面的接收器的细节,那么命令随后被客户端隐藏的动机是什么?

abstraction information-hiding design-patterns command-pattern

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

是否可以在Angular 2上创建组件抽象?

我想创建一个具有初始行为的AbstractComponent,同时能够在需要时覆盖它,可能吗?这是一个好习惯吗?

应该看起来或多或少那样:

export abstract class AbstractComponent implements OnInit {

  constructor(authService: AuthService, router: Router) {}

  ngOnInit() {
    if (authService.userNotLoggedInAnymore()) {
      router.navigate(['Login']);
    }
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

architecture abstraction angular

13
推荐指数
1
解决办法
9372
查看次数

抽象初始化属性的最佳方法

抽象这种模式的最佳方法是什么:

class MyClass
  attr_accessor :foo, :bar

  def initialize(foo, bar)
    @foo, @bar = foo, bar
  end
end
Run Code Online (Sandbox Code Playgroud)

一个好的解决方案应该考虑超类,并且能够处理仍然能够使用初始化程序来执行更多操作.在您的解决方案中不牺牲性能的额外要点.

ruby abstraction

12
推荐指数
1
解决办法
5625
查看次数

向非程序员解释抽象

抽象是一个似乎难以解释的概念,而不回复使用编程术语.我已经考虑了很多,但我无法得出满意的答案.有没有人有任何非常一般但非常相关的解释?

隐喻,similes等都是受欢迎的.

abstraction programming-languages

12
推荐指数
3
解决办法
5585
查看次数

C++中抽象类和纯抽象类有什么区别?

例:

迭代器是纯粹的抽象:任何行为类似于迭代器的东西都是迭代器.

这是什么意思?

c++ oop abstract-class abstraction

12
推荐指数
4
解决办法
1万
查看次数