相关疑难解决方法(0)

是否可以使用仅具有重构属性的类?

我有一个方法,需要30个参数.我把参数放到一个类中,这样我就可以将一个参数(类)传递给方法.在重构传递一个封装所有参数的对象的情况下是否完全正常,即使它包含所有参数.

c# oop refactoring

79
推荐指数
7
解决办法
7105
查看次数

当一个方法有太多参数?

今天调试一些Web服务客户端代码时(在Java中,使用jax-ws),我遇到了令人兴奋的97个参数的Web服务方法!

我必须创建一个调用此方法的测试用例,我注意到了几件事:

  • 代码辅助/悬停不能很好地扩展.我正在使用Eclipse,并且该方法的工具提示与屏幕一样宽,并且跨越多行.
  • 我不得不从之前的xml捕获中复制参数值,并且几乎不可能记住"我在哪里" - 当我将光标放在逗号之后并且在键入一些值之前,我经常得到错误的数据类型 - 我输入了整数而不是字符串,反之亦然.
  • 即使在我写完所有参数之后,我仍然遇到了一些错误并且签名不匹配.不幸的是,Eclipse将整条线标记为红色,因为有错误,所以找到错误的地方需要更多的时间:(

所以这让我思考,您认为方法的最大参数数量是多少?如果您可以更改此Web服务签名,您认为如何改进它?

language-agnostic ide parameters

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

构造函数的参数数量

我有一个类,需要将12个参数传递给它的构造函数.所以我认为这个类的设计有问题.

我想询问是否有任何关于类设计的设计模式或一般规则集合,特别是它的构造函数.

c++ parameters refactoring constructor design-patterns

35
推荐指数
3
解决办法
6416
查看次数

如何避免Angularjs中的大量依赖项

我有一个Angular应用程序.它的工作正常,但随着我的应用程序越来越大,我担心每个控制器都需要注入大量的依赖项.

例如

app.controller('viewapps',[
    '$scope','Appfactory','Menu','$timeout','filterFilter','Notice', '$routeParams', 
    function($scope,Appfactory,Menu,$timeout,filterFilter,Notice,$routeParams) {
        //controller code..    
}])
Run Code Online (Sandbox Code Playgroud)

我确信将来会依赖列表.我在这里做错了吗?这是正确的方法吗?有效处理这个问题的最佳方法是什么?

dependency-injection angularjs

19
推荐指数
2
解决办法
6240
查看次数

有多少功能参数太多了?

可能重复:
有多少参数太多了?

我只是写了一个带有几个值的函数,它让我思考.函数/方法的参数的数量是多少?什么时候(如果)它表示有缺陷的设计?你设计/重构函数来接受结构,数组,指针等来减少参数的数量吗?你是否为了减少参数的数量而重构数据?不过,似乎这在OOP设计中可能稍微适用一些.只是好奇看别人如何看待这个问题.

编辑:作为参考,我刚写的函数采用了5个参数.我使用了我的AP Econ老师给我的几个定义.超过2; 少于7.

language-agnostic parameters

7
推荐指数
4
解决办法
3318
查看次数

避免过多的函数参数:以类为中心或以函数为中心的方法?

你如何修复以下传递过多参数的错误代码?

void helper1(int p1, int p3, int p5, int p7, int p9, int p10) {
  // ...
}

void helper2(int p1, int p2, int p3, int p5, int p6, int p7, int p9, int p10) {
  // ...
}

void foo(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, 
         int p9, int p10) {
  helper1(p1, p3, p5, p7, p9, p10);
  helper2(p1, p2, p3, p5, p6, p7, p9, p10);
}
Run Code Online (Sandbox Code Playgroud)

我看到两种不同的方法:

方法1:将所有函数放在一个类中

class Foo …
Run Code Online (Sandbox Code Playgroud)

c++ parameters class-design function parameter-passing

6
推荐指数
1
解决办法
1965
查看次数

JavaScript中有多少参数太多?

我在StackOverflow上遇到了以下问题:有多少参数太多了?

这让我想到,JS函数的参数数量是否存在实际限制?

test(65536); // okay
test(65537); // too many

function test(n) {
    try {
        new Function(args(n), "return 42");
        alert(n + " parameters are okay.");
    } catch (e) {
        console.log(e);
        alert(n + " parameters are too many.");
    }
}

function args(n) {
    var result = new Array(n);
    for (var i = 0; i < n; i++)
        result[i] = "x" + i;
    return result.join(",");
}
Run Code Online (Sandbox Code Playgroud)

事实证明,JavaScript在函数上强加了65536个参数的实际限制.

但是,有趣的是错误消息说限制是65535参数:

SyntaxError: Too many parameters in function definition (only 65535 allowed)
Run Code Online (Sandbox Code Playgroud)

所以,我有两个问题:

  1. 为什么会出现这种差异?这是语言实现中的一个错误吗?
  2. ECMAScript标准是否对功能参数施加了此限制?

javascript parameters standards ecmascript-5 ecmascript-6

5
推荐指数
1
解决办法
759
查看次数

Java Pattern的优点,其中method将Object作为参数而不是单个参数

我一直在通过Amazon Java SDK使用Amazon Glacier.

我很惊讶参数是通过一个对象传递的,而不是作为单独的参数传递的.

例如,要检索作业的输出,其中参数是Vault,JobId,range,则使用以下技术:

client.getJobOutput(new GetJobOutputRequest(Vault, JobId, range));
Run Code Online (Sandbox Code Playgroud)

代替:

client.getJobOutput(Vault, JobId, range);
Run Code Online (Sandbox Code Playgroud)

这两种方法的优点和缺点是什么?

java amazon-web-services amazon-glacier

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

使用代码约定验证参数属性

我与一位同事讨论了使用代码合同来执行先决条件检查.

假设我们有以下代码:

namespace Project
{
    using System;
    using System.Diagnostics.Contracts;

    public class Thing
    {
        public string Foo { get; set; }

        public int Bar { get; set; }
    }

    public class ThingsManipulator
    {
        public void AddThing(Thing thing)
        {
            Contract.Requires<ArgumentNullException>(thing != null);

            // Do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果// Do something我正在访问thing.Foothing.Bar执行操作,我是否应该通过代码合同验证它们?

public void AddThing(Thing thing)
{
    Contract.Requires<ArgumentNullException>(thing != null);
    Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(thing.Foo));
    Contract.Requires<ArgumentException>(thing.Bar > 0);

    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我的同事说只应检查整个参数(即我们应该只放置第一个合同),我认为方法应检查它们使用的是什么,无论它是整个参数还是其中一个属性(即我们应该全部三个合同).

请注意,我理解并同意,如果参数的属性应始终满足要求,则该要求应放在对象的不变检查中.

我所指的是通常有效的值,但对于特定方法无效(例如,在上面的示例中thing.Bar可能很乐意保留负值,但AddThing不喜欢它们).

我的同事说在这些情况下,方法签名应该显示它使用的所有项目而不是单个对象(例如AddThing(string …

c# code-contracts

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

解决导致错误的参数的最佳方法C#

我尝试调用以下过程时收到错误:

ApplyVoucherNumberToBillingCharges(practiceID,
                                  Convert.ToInt32(rdoVoucherNumberAppliesTo.SelectedValue), 
                                  VoucherNumber, 
                                  VoucherNumberID,
                                  Convert.ToInt32(hdRoundingRecordId.Value),
                                  ChargeID,
                                  hdGenerateVoucherNumberChargeList.Value,
                                  Convert.ToDateTime(txtFromDate.Text),
                                  Convert.ToDateTime(txtToDate.Text),
                                  Convert.ToDateTime(txtPostingDate.Text),
                                  Convert.ToInt32(ddlVisitType.SelectedValue),
                                  SelectVisitProvider.SelectedID,
                                  SelectVisitLocation.SelectedID,
                                  chkOverwriteVoucherNumber.Checked);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

输入字符串格式不正确c#

我知道这与转换类有关,因为我之前调用不同的方法时遇到了同样的错误.区别在于只有一个参数使用Convert类,现在有几个参数.

错误信息并不像我想的那样具有描述性,也没有提供许多关于特定情况发生的线索.

除了对每个执行此操作的参数进行注释和硬编码以及查看哪个参数导致问题之外,还有更好的方法来确定问题是什么吗?

我真的很想知道,因为我的项目有时需要几分钟才能构建(我知道,这很荒谬,我已经尝试了一切来解决这个问题,但没有任何作用)所以调试这个小问题可能需要永远.

感谢您的任何帮助,您可以提供.

.net c# debugging parameters error-handling

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