标签: abstraction

.Net和In C#上的多态数字

真的很遗憾,在.Net中没有数字的多态性,即没有统一不同类型的数字类型的数字接口,如bool,byte,uint,int等.在极端情况下,我们想要一个完整的抽象包代数类型.

Joe Duffy有一篇关于这个问题的文章:

http://www.bluebytesoftware.com/blog/CommentView,guid,14b37ade-3110-4596-9d6e-bacdcd75baa8.aspx

您如何在C#中表达这一点,以便在不影响.Net或C#的情况下对其进行改造?

我有一个想法,首先要定义一个或多个抽象类型(接口,如INumeric - 或者比它更抽象),然后定义实现这些的结构并包装类型如int,同时提供返回新类型的操作(例如Integer32: INumeric;其中添加将被定义为

public Integer32 Add(Integer32 other)
{
    return Return(Value + other.Value);
}
Run Code Online (Sandbox Code Playgroud)

我有点害怕这段代码的执行速度,但至少它是抽象的.

没有运营商超载良好......

还有其他想法吗?

.Net看起来不像一个可行的长期平台,如果它不能拥有我认为的这种抽象 - 并且效率很高.

抽象是重用.

更新:

到目前为止,这是一个示例实现类型签名:

public struct Integer32 : INumeric<Integer32, Int32>, IOrder<Integer32, Int32>
Run Code Online (Sandbox Code Playgroud)

补偿缺乏协变返回类型.

.net c# performance abstraction numeric

3
推荐指数
1
解决办法
379
查看次数

如何抽象NHibernate以避免紧密依赖并促进测试

是否可以采用像NHibernate或Entity Framework这样的O/RM,并以一种可以在遇到O/RM无法处理的情况时替换它的方式对其进行抽象.

使用大块服务方法创建服务似乎很诱人,其中创建会话,会话用于获取/ upsert实体,然后用于保存所有脏对象.

我会考虑存储库模式,以便服务操作向存储库请求实体,并且O/RM会话嵌入在存储库中.但是你如何保存相关实体,并且Update(T实体)方法会立即刷新更改.它似乎很简单,而且通常不令人满意.

我现在倾向于使用单个O/RM包装器类,它使用诸如"StartSession","EndSession","AbandonSession","GetById(object id)"等通用方法公开接口.

至少这将允许OR/M在测试中伪造,这是我的另一个大问题.

我想我是说我不想密切交织业务逻辑和O/RM数据访问代码,因为切换到另一个O/RM可能会导致大部分代码被替换.

人们在现实世界中做了什么?

testing nhibernate abstraction

3
推荐指数
1
解决办法
771
查看次数

斯卡拉可以被视为"抽象倒置"吗?

问候,

这是一个具有挑衅性的问题,旨在公开讨论如何在开发者社区中看到抽象反转.我很想知道你的想法.

首先,这里引用维基百科给出的抽象反转例子:http: //en.wikipedia.org/wiki/Abstraction_inversion

在诸如Java和C++之类的面向对象语言中创建表示函数的对象是很麻烦的,其中函数不是第一类对象.在C++中,可以通过重载()运算符来使对象"可调用",但是仍然经常需要实现一个新类,例如STL中的Functors.

对我来说,函数是Scala中的一等公民,但是当我们使用Scala生成Java字节码时,Scala会在Java上创建特定的类'以使函数式编程成为可能...... 我们可以将其视为抽象反转吗?

同样可以应用于Clojure或JVM的任何功能语言......甚至是Apache Collections,例如:

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/Closure.html


顺便说一句,我不相信维基百科文章的客观性.例如,当谈到微内核中可能的抽象反转时,文章说"一个观点主体认为微内核设计是一个抽象反转",但在OOP中没有这样的函数类型声明.

oop abstraction programming-languages functional-programming scala

3
推荐指数
2
解决办法
399
查看次数

为你的IoC提供一个包装好主意吗?

我已经使用StructureMap超过一年了.而且这段时间我曾经有一个名为IoC的包装类,看起来像这样

class IoC {
    public static T GetInstance<T>()
    {
        return (T)GetInstance(typeof(T));
    }
    public static IEnumerable<T> GetAllInstances<T>()
    {
        return ObjectFactory.GetAllInstances<T>();
    }

    public static IEnumerable GetAllInstances(Type type)
    {
        return ObjectFactory.GetAllInstances(type);
    }

    public static object GetInstance(Type type)
    {
        return ObjectFactory.GetInstance(type);
    }

    public static void Inject<T>(T obj)
    {
        ObjectFactory.Inject(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了包装器,假设我可能想在某个时候更改IoC容器.此时我觉得这很糟糕.一个原因是:我不能在我的代码中使用ObjectFactory做其他有趣的事情,我必须使用这个包装器.另一件事是:我们的代码不应该真正独立于DependencyInjection容器.

使用这种方法的优点/缺点是什么?

structuremap abstraction dependency-injection ioc-container wrapper

3
推荐指数
1
解决办法
2300
查看次数

使用PDO创建模型层

我正在开发一个MVC应用程序框架,我已经就我应该构建模型层的方式提出了一些建议.

构建模型,以便将每个模型映射到数据库中用于该应用程序的表,因此典型的应用程序将具有该表

  • 组态
  • 话题
  • 论坛

并将每个映射到名为PHP的文件,如 app/models/configuration.php

现在我遇到的问题是创建父数据库类以便能够处理特定的表数据,例如:

class PDOModel
{
    public function __construct()
    {
        $this->__Communicator = Registry::getPDOInstance();
    }

    public function getSingle($id)
    {
         return /*Row*/;
    }

    /*Etc*/
}
Run Code Online (Sandbox Code Playgroud)

然后是应用程序模型的类似内容

class Model_Topic extends PDOModel
{
    protected $__id_column = 'id';
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中我可以像这样使用:

$Topic = $this->model->topic->get(22);
Run Code Online (Sandbox Code Playgroud)

但我也想考虑自动连接表,是否有任何简单的轻量级库已经过测试并符合我的要求.

任何帮助将受到高度赞赏.

php pdo abstraction model

3
推荐指数
1
解决办法
2934
查看次数

python中的抽象函数,不使用lambda

我只是有一个问题.如何在没有lambda的情况下使用抽象函数?

说我有两个清单

a = [1,2,3,4,5]
b = [2,4,6]
Run Code Online (Sandbox Code Playgroud)

如果我要打印所有元素都出现在A和B中,

与lambda:

def f():
  print reduce (list.__add__ , map (lambda x: filter (lambda y: x == y, b), a))
Run Code Online (Sandbox Code Playgroud)

怎么做没有lambda?

我的意思是我只是使用辅助函数而不是lambda

python abstraction

3
推荐指数
1
解决办法
441
查看次数

面向对象的设计原则抽象

在阅读抽象时,我遇到了以下声明

"抽象仅捕获与当前视角相关的对象的细节"

例如.从驾驶员的角度来看,Car class会是

  public class Car
  {
     void start();
     void applybrakes();
     void changegear();
     void stop();
   }
Run Code Online (Sandbox Code Playgroud)

从机械师的角度来看,Car class会是

  public class Car
  {
     void changeOil();
     void adjustBrakes();
   }
Run Code Online (Sandbox Code Playgroud)

我的问题,在设计系统时,我们是为一个用户视角(驱动程序还是机制)设计的,还是我们可以设计多个用户视角并根据用户类型进一步抽象出来?

希望我的问题很明确.

谢谢

oop abstraction object-oriented-analysis

3
推荐指数
1
解决办法
611
查看次数

抽象和分解有什么区别?

在软件工程中,设计阶段有两个主要概念abstraction,decomposition但我无法得到它们之间的差异?

uml modeling abstraction software-design

3
推荐指数
1
解决办法
6309
查看次数

开闭原则和继承的区别

我知道开闭原则意味着对扩展开放,对修改封闭。考虑如下示例

public class Vehicle{
    public void service(){
        //vehicle servicing code
    }
}

public class Bike extends Vehicle{

    public void service(){
        // bike specific servicing 
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我明白Bike该类Vehicle使用开放封闭原则扩展并添加了新功能。

考虑我创建Vehicle类的jar 文件,然后类从 jarBike扩展Vehicle类。在这种情况下,我们不能修改Vehicle类并Bike扩展它。这是开闭原则的一个很好的例子吗?我想知道 OCP 与继承有何不同

polymorphism inheritance abstraction open-closed-principle solid-principles

3
推荐指数
1
解决办法
1255
查看次数

Haskell类型参数类型

我想定义一个特定的仿函数如下:

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}

data ValOrError a b = Val a | Error b

class MF c a b where
  mcons :: a -> c -> c
  merr :: b -> c
  mhead :: c -> ValOrError a b
  mtail :: c -> ValOrError c b
Run Code Online (Sandbox Code Playgroud)

我希望我的类型MF上的类型类型c具有类型参数ab.我试着在这样的数据结构上定义一个过滤函数,如下所示:

mfilter f e =
  let h = mhead e in
  let t = mtail e in
  case h of
    Error …
Run Code Online (Sandbox Code Playgroud)

haskell abstraction interface typeclass

3
推荐指数
1
解决办法
85
查看次数