如果我有一个三角课,就像这样:
export default class Triangle {
sides: number[]
constructor(...sides: number[]) {
this.sides = sides
}
kind() {
// returns type of triangle
{
}
并且如果传递到构造函数中的两边没有创建一个真正的三角形,那么在创建类时(例如在构造函数中)或在调用函数时抛出错误会更好吗?
有this answer,说在Java中还可以,而且我敢肯定它可以在TypeScript中使用。我只是想知道在OOP方面,特别是在TypeScript方面是否存在“最佳实践”。
答案 0 :(得分:2)
在构造函数中抛出是完全可以接受的。通常,最佳实践是快速失败并尽早失败。例如,在您的情况下,最好抛出构造函数,以便可以将错误尽早暴露给负责发送不良数据的代码。如果您稍后在实际使用三角方法时抛出该异常,那么将被该异常破坏的代码就不会出错(它们可以采取任何措施来防止该异常)。这通常意味着您必须寻找对象的创建位置,才能解决该错误。
首先,构造函数的主要职责之一是确保只能在有效状态下创建对象。因此,如果参数将导致对象处于无效状态,则抛出异常不仅可以接受,而且这也恰恰说明了为什么构造函数首先存在的原因。
答案 1 :(得分:0)
没有正确的答案,但是您应始终使“不可能”状态表示为“不可能”,IE在这种情况下,三角形将始终具有3个边,因此仅使该数目之外的任何边都无法通过。
# views.py
def siren_search(request):
context = {}
if request.method == 'GET':
term = request.GET.get('query')
if term:
try:
jobsite = JobSite.objects.get(name__iexact = term)
cameras = jobsite.camerasystem_set.all()
context = {
'cameras': cameras,
'numberOfCameras': len(cameras)
}
except ObjectDoesNotExist:
pass
## Add functionality to handle button click and make the following request
pulseSiren = requests.get(f'{camera.name}.example.com:port/file.xml?relay2State=2', auth=('user', 'pass'))
return render(request, 'siren_search.html', context)
这样做的好处是,每当传递无效数量的修饰符时,程序都会在编译时(安全)而不是运行时(不安全)失败。