标签: abstraction

例外和抽象

什么时候应该抛出自定义异常?

例如,我有一些连接到服务器的代码。连接到服务器的代码在连接失败时会抛出 IOException。在它所调用的方法的上下文中,这很好。在网络代码中也很好。

但由于这表示没有连接(因此无法正常工作),异常会一直上升到用户界面。在这个阶段,IOException 的含义非常模糊。像 NoConnectionException 这样的东西会更好。

所以,我的问题是:您应该在哪个阶段捕获异常,而不是抛出另一个更适合抽象的(自定义)异常?

language-agnostic abstraction exception

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

为什么要抽象 ORM?

我经常看到使用存储库模式来抽象 ORM 的代码。为什么要这样做?ORM 不是已经是一个抽象并充当存储库本身了吗?

之间有很大区别吗

public class EmployeeRepo 
{
    GetById(int id) { //Access ORM here };
}
Run Code Online (Sandbox Code Playgroud)

消费数据:

public class MyController{
    private EmployeeRepo = _Repo = new EmployeeRepo();

    public ActionResult ShowEmployee(int id)
    {
        var emp = _Repo.GetById(id);
        //Versus
        var emp = ORM.Where(e => e.Id == id);

        return View(emp);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我应该重新创建 ORM 已经提供给我的东西?

c# orm abstraction repository

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

在单独的文件中定义 Python 类

# File 1
me = MongoEngine(app) # I want to use my instance of MongoEngine to define new classes like the example in File 2

# File 2
class Book(me.Document):
    title = StringField(null=False, unique=True)
    year_published = IntField(null=True)
Run Code Online (Sandbox Code Playgroud)

在新文件中创建新类时,如何将实例me.Document作为对象定义传递。如果我把它们放在同一个文件中,它会起作用吗?

oop abstraction instance-variables python-3.x

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

面向数据设计中的接口

这句话是这样的:

“编程接口/抽象,而不是实现”。

我们都知道接口是面向对象编程中解耦的一种手段。就像某些对象履行的合同一样。

但我无法理解的是:

如何在面向数据的设计中对接口/抽象进行编程?

就像调用一些“Drawable”一样,但我现在不知道它是矩形还是圆形,但它实现了接口“Drawable”。

谢谢

abstraction interface data-oriented-design

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

在企业应用程序中抽象数据连接层和表示层

我们正在构建一个企业应用程序,我们将在其中整合多个用户界面平台(即ASP.net webapp,Windows应用程序,有朝一日,移动应用程序)和多个后端数据库平台(即SQL Server,XML,Oracle).另一个必要条件是这些后端数据库要么集中存储,要么通过Web访问,要么本地化在客户端计算机上,偶尔也会同步到中央服务器.

任何人都可以就如何抽象用户界面层和数据层提出建议,以便我们可以更简单地在各种UI和DB的各种选择之间创建即插即用的适应性?例如:在一种情况下,我们可能有一个通过互联网在中央服务器上运行的网络应用程序,我们可能有远程机器通过Windows应用程序运行本地化副本.在预定的时间间隔,我们希望所有机器都同步,以便它们都可以拥有接近实时的数据.

我们还需要有关处理所涉及的各种连接字符串的建议,以便在任何一个应用程序上需要更改的唯一设置将是"本地"或"远程",这将确定必要的连接字符串.

.net abstraction design-patterns connection-string database-connection

2
推荐指数
1
解决办法
391
查看次数

如果数据被1个应用程序使用,则使用数据库表的好处而不仅仅是硬编码简单的数据列表

有一段时间,许多人告诉我,美国国家(和地区)的列表应存储在数据库表中,并缓存给使用该信息的应用程序.他们为此提供的唯一理由是促进正常化,因为"这就是我们一直以来的做法".

现在,如果列表经常因为应用程序的范围在国际上发生变化(比如包括加拿大省),我可以理解将列表抽象为数据表,该数据表也表示国家标识符.但是,如果列表几乎被锁定并且仅在应用程序的一个屏幕上使用,那么值得进行查询和缓存吗?存储SMALLINT外键比CHAR(2)好得多的区别?它总是实用吗?

只是在思考我和我合作过的公司所见过的这种趋势.

abstraction hard-coding

2
推荐指数
1
解决办法
1221
查看次数

抽象的目的

编码抽象的目的是什么:

程序员的效率还是程序的效率?

我们的教授说,它仅用于帮助程序员更快地理解和修改程序以适应不同的场景.他还认为这会给该计划的表现带来额外负担.我不清楚这意味着什么.

有人可以详细说明吗?

language-agnostic abstraction

2
推荐指数
1
解决办法
778
查看次数

C++如何推广类函数参数来处理多种类型的函数指针?

我不知道我所要求的是可行的,愚蠢的还是简单的.我最近才开始住在模板函数和类中,我想知道下面的场景是否可行:一个包含要调用的函数指针的类.函数指针不能是特定的,而是抽象的,因此无论何时调用类的构造函数,它都可以接受不同类型的函数指针.当调用类的execute函数时,它会使用参数(或参数)执行在构造时分配的函数指针.基本上,抽象在整个设计中保留,并在用户上留下要传递的函数指针和参数.以下代码尚未经过测试,只是为了演示我正在尝试做的事情:

void (*foo)(double);
void (*bar)(double,double);
void (*blah)(float);

class Instruction
{
    protected:
      double var_a;
      double var_b;
      void (*ptr2func)(double);
      void (*ptr2func)(double,double);  
    public:
      template <typename F> Instruction(F arg1, F arg2, F arg3)
      {
         Instruction::ptr2func = &arg1;
         var_a = arg2;
         var_b = arg3;
      };    
      void execute()
      {
         (*ptr2func)(var_a);
      };
};
Run Code Online (Sandbox Code Playgroud)

我不喜欢我必须在可能的可重载函数指针类中保留一个列表的事实.我怎么可能改进上面的内容以尽可能地概括它,以便它可以与任何类型的函数指针一起使用?请记住,我将保留这些实例化对象的容器并按顺序执行每个函数指针.谢谢 !编辑:也许这个类应该是它自己的模板,以便于使用许多不同的函数指针?编辑2:我找到了解决问题的方法,仅供将来参考,不知道它是否正确,但它有效:

class Instruction
{
  protected:
    double arg1,arg2,arg3;
  public:
    virtual void execute() = 0;
};

template <class F> class MoveArm : public Instruction
{
  private:
    F (func);    
  public:
   template <typename T> 
   MoveArm(const T& f,double …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers abstraction function

2
推荐指数
1
解决办法
2354
查看次数

如何确定我在列表中引用的子类?

我有一个大约100个对象的列表,恰好是瓷砖.它看起来像这样:

 List<Tile> Tiles;
Run Code Online (Sandbox Code Playgroud)

在我的代码的其他地方,我有从tile基类派生的类,我将使用house作为这个例子:

 public class house : Tile
Run Code Online (Sandbox Code Playgroud)

在列表顶部我已经在数据结构中添加了不同类型的切片:

 Tiles.add(new house());
 Tiles.add(new church()); //ect. ect.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我通过像for-loop这样的控制结构引用该列表,我怎么知道哪些瓷砖是教堂或房屋.基本上我需要将两种不同类型的瓷砖进行比较.是否有可能知道我引用了哪个子类?我确信对此有一个简单的解释,但是当谈到面向对象的编程时我并不是很精通,所以我甚至不能完全确定在提供帮助时我应该寻找什么.

c# oop abstraction

2
推荐指数
1
解决办法
154
查看次数

如何用相同的方法和继承编写2个类?

我有X类,它们具有不同的信息和计算方法,应该共享但可以覆盖,所以:

class Rule1 {
    int type = 1;
    string name = "Rule";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule2 {
    int type = 2;
    string name = "Rule2";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule3 {
    int type = 3;
    string name = "Rule3";
    public float Calc()
    {
        return 3 + 4 + type; // DIFFERENT
    }
}
Run Code Online (Sandbox Code Playgroud)

我要在调用方法中编写的内容如下:

class Calculator
{ …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism inheritance encapsulation abstraction

2
推荐指数
1
解决办法
91
查看次数