First of all, I would say that the problem you described pertains not only to RMI but to any kind of interface of a component, including plain Java interface, although in case of RMI a bad design may have additional caveats, e.g. performance.
Not knowing the details, I can only guess by looking at my experience. Such an unnecessary complexity of an interface is often related to invalid or insufficient business requirements defined for the component. If that's the case, in future the guys at the other division will probably have to frequently modify the interface, trying to catch up with new features, which is usually a cause of pain for the users of the component. Although changes of the interface are of course natural over time, in this case they may result in a deep redesign.
Furthermore, an overly complex interface usually means that the author exposes implementation details. Needless to say, this can lead to unnecessary interface changes due to the evolution of the implementation, switching to a different technology, or even optimization only.
Last but not least, giving the users more than they need is a straight way to letting them use functionalities not even intended to be used, or even exist. In future, it may turn out that the users invoke the interface in an unexpected way. It makes the maintenance of the component a hell.
To wrap it up, the key arguments for a simple interface are: clear business definition of a component, improved flexibility of the implementation, maintainability. And remember, all those profits are good for both the component developers and the users.
Your not barking up the wrong tree, but being in a different division, you might have a hard time getting the changes you want. You can't win every battle :-(
But props to you for "fighting the good fight". I'd suggest you present them with a cleaned-up version of the interface, if you have the time to do it. But other than that, you might just have to let it go.
You'll data to accomplish what you're doing. I agree with unforgiven3 -- it's a good fight, and you're not barking up the wrong tree -- if you present the suggestion of a cleaner code right now, without ammunition, it could fall on deaf ears, and worse; could start a "my horse is bigger than your horse" kind of contest -- not productive.
Just my suggestion;
Start documenting the bugs, or any other ticket item which relates or points to the inefficient interface
Start documenting the code reviews, put in a wiki (a company sanctioned wiki -- don't get into trouble now), just document it for now -- it's not yet time to pass judgement, you're just gathering data.
When you've got enough data from these 2, make a case on programmer productivity that is being lost or misused because of inefficient design decisions -- it's very difficult to argue when cost is involved.
发布评论
评论(3)
首先,我想说,您描述的问题不仅与 RMI 有关,而且与组件的任何类型的接口有关,包括普通的 Java 接口,尽管在 RMI 的情况下,糟糕的设计可能会有额外的警告,例如性能。
不知道具体情况,只能根据自己的经历来猜测。 接口的这种不必要的复杂性通常与为组件定义的无效或不充分的业务需求有关。 如果是这样的话,将来其他部门的人可能不得不频繁修改界面,试图赶上新功能,这通常会给组件用户带来痛苦。 虽然随着时间的推移,界面的变化当然是自然的,但在这种情况下,它们可能会导致深度的重新设计。
此外,过于复杂的接口通常意味着作者会暴露实现细节。 不用说,这可能会由于实现的演变、切换到不同的技术,甚至只是优化而导致不必要的接口更改。
最后但并非最不重要的一点是,为用户提供超出他们需要的功能是让他们使用甚至不打算使用甚至不存在的功能的直接方法。 将来,用户可能会以意想不到的方式调用该接口。 这使得组件的维护变成了地狱。
总而言之,简单接口的关键参数是:组件的清晰业务定义、提高实现的灵活性、可维护性。 请记住,所有这些利润对组件开发人员和用户都有好处。
First of all, I would say that the problem you described pertains not only to RMI but to any kind of interface of a component, including plain Java interface, although in case of RMI a bad design may have additional caveats, e.g. performance.
Not knowing the details, I can only guess by looking at my experience. Such an unnecessary complexity of an interface is often related to invalid or insufficient business requirements defined for the component. If that's the case, in future the guys at the other division will probably have to frequently modify the interface, trying to catch up with new features, which is usually a cause of pain for the users of the component. Although changes of the interface are of course natural over time, in this case they may result in a deep redesign.
Furthermore, an overly complex interface usually means that the author exposes implementation details. Needless to say, this can lead to unnecessary interface changes due to the evolution of the implementation, switching to a different technology, or even optimization only.
Last but not least, giving the users more than they need is a straight way to letting them use functionalities not even intended to be used, or even exist. In future, it may turn out that the users invoke the interface in an unexpected way. It makes the maintenance of the component a hell.
To wrap it up, the key arguments for a simple interface are: clear business definition of a component, improved flexibility of the implementation, maintainability. And remember, all those profits are good for both the component developers and the users.
你并不是找错了对象,而是身处不同的部门,你可能很难得到你想要的改变。 你不可能赢得每场战斗:-(
但是支持你“打好仗”。如果你有时间的话,我建议你向他们展示界面的清理版本。但其他除此之外,你可能只能放手了。
Your not barking up the wrong tree, but being in a different division, you might have a hard time getting the changes you want. You can't win every battle :-(
But props to you for "fighting the good fight". I'd suggest you present them with a cleaned-up version of the interface, if you have the time to do it. But other than that, you might just have to let it go.
您将利用数据来完成您正在做的事情。 我同意 unforgiven3 的观点——这是一场很好的战斗,而且你没有找错人——如果你现在提出一个更清晰的代码的建议,没有弹药,它可能会被置若罔闻,甚至更糟; 可能会发起一场“我的马比你的马大”之类的竞赛——没有成效。
只是我的建议;
开始记录错误,或任何其他与低效接口相关或指向低效接口的票据项目
开始记录代码评论,放入维基(公司认可的维基——现在不要陷入麻烦),暂时将其记录下来——现在还不是做出判断的时候,你只是在收集数据。
当你从这两者中获得足够的数据时,就可以证明程序员的生产力由于低效的设计决策而被损失或滥用——当涉及到成本时,很难争论。
希望能帮助到你。
You'll data to accomplish what you're doing. I agree with unforgiven3 -- it's a good fight, and you're not barking up the wrong tree -- if you present the suggestion of a cleaner code right now, without ammunition, it could fall on deaf ears, and worse; could start a "my horse is bigger than your horse" kind of contest -- not productive.
Just my suggestion;
Start documenting the bugs, or any other ticket item which relates or points to the inefficient interface
Start documenting the code reviews, put in a wiki (a company sanctioned wiki -- don't get into trouble now), just document it for now -- it's not yet time to pass judgement, you're just gathering data.
When you've got enough data from these 2, make a case on programmer productivity that is being lost or misused because of inefficient design decisions -- it's very difficult to argue when cost is involved.
hope it helps.