什么时候应该抛出自定义异常?
例如,我有一些连接到服务器的代码。连接到服务器的代码在连接失败时会抛出 IOException。在它所调用的方法的上下文中,这很好。在网络代码中也很好。
但由于这表示没有连接(因此无法正常工作),异常会一直上升到用户界面。在这个阶段,IOException 的含义非常模糊。像 NoConnectionException 这样的东西会更好。
所以,我的问题是:您应该在哪个阶段捕获异常,而不是抛出另一个更适合抽象的(自定义)异常?
我经常看到使用存储库模式来抽象 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 已经提供给我的东西?
# 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作为对象定义传递。如果我把它们放在同一个文件中,它会起作用吗?
这句话是这样的:
“编程接口/抽象,而不是实现”。
我们都知道接口是面向对象编程中解耦的一种手段。就像某些对象履行的合同一样。
但我无法理解的是:
如何在面向数据的设计中对接口/抽象进行编程?
就像调用一些“Drawable”一样,但我现在不知道它是矩形还是圆形,但它实现了接口“Drawable”。
谢谢
我们正在构建一个企业应用程序,我们将在其中整合多个用户界面平台(即ASP.net webapp,Windows应用程序,有朝一日,移动应用程序)和多个后端数据库平台(即SQL Server,XML,Oracle).另一个必要条件是这些后端数据库要么集中存储,要么通过Web访问,要么本地化在客户端计算机上,偶尔也会同步到中央服务器.
任何人都可以就如何抽象用户界面层和数据层提出建议,以便我们可以更简单地在各种UI和DB的各种选择之间创建即插即用的适应性?例如:在一种情况下,我们可能有一个通过互联网在中央服务器上运行的网络应用程序,我们可能有远程机器通过Windows应用程序运行本地化副本.在预定的时间间隔,我们希望所有机器都同步,以便它们都可以拥有接近实时的数据.
我们还需要有关处理所涉及的各种连接字符串的建议,以便在任何一个应用程序上需要更改的唯一设置将是"本地"或"远程",这将确定必要的连接字符串.
.net abstraction design-patterns connection-string database-connection
有一段时间,许多人告诉我,美国国家(和地区)的列表应存储在数据库表中,并缓存给使用该信息的应用程序.他们为此提供的唯一理由是促进正常化,因为"这就是我们一直以来的做法".
现在,如果列表经常因为应用程序的范围在国际上发生变化(比如包括加拿大省),我可以理解将列表抽象为数据表,该数据表也表示国家标识符.但是,如果列表几乎被锁定并且仅在应用程序的一个屏幕上使用,那么值得进行查询和缓存吗?存储SMALLINT外键比CHAR(2)好得多的区别?它总是实用吗?
只是在思考我和我合作过的公司所见过的这种趋势.
编码抽象的目的是什么:
程序员的效率还是程序的效率?
我们的教授说,它仅用于帮助程序员更快地理解和修改程序以适应不同的场景.他还认为这会给该计划的表现带来额外负担.我不清楚这意味着什么.
有人可以详细说明吗?
我不知道我所要求的是可行的,愚蠢的还是简单的.我最近才开始住在模板函数和类中,我想知道下面的场景是否可行:一个包含要调用的函数指针的类.函数指针不能是特定的,而是抽象的,因此无论何时调用类的构造函数,它都可以接受不同类型的函数指针.当调用类的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) 我有一个大约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这样的控制结构引用该列表,我怎么知道哪些瓷砖是教堂或房屋.基本上我需要将两种不同类型的瓷砖进行比较.是否有可能知道我引用了哪个子类?我确信对此有一个简单的解释,但是当谈到面向对象的编程时我并不是很精通,所以我甚至不能完全确定在提供帮助时我应该寻找什么.
我有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) abstraction ×10
c# ×3
oop ×2
.net ×1
c++ ×1
exception ×1
function ×1
hard-coding ×1
inheritance ×1
interface ×1
orm ×1
pointers ×1
polymorphism ×1
python-3.x ×1
repository ×1
templates ×1