Keep sending a string without breaking changes on this NPM library
A little bit of backstory:
We're trying to address a bug on a local library we have.
I was trying to convince the senior developers of changing naming convention when using word like these:
enable disable hide unhide
because they were using
enable disable hide undelete
We discussed the fact of this being a breaking change and will stop other products from working.
So it was disscused to add the unhide without taking the undelete out so that it does not break anything and in the process, if the user uses either unhide or undelete they should still do the same in theory.
Here comes the programming problem now:
This is my function:
toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false)
How can I continue to pass a string (without converting to an array or object) but also start passing 2 values so that the changes have to be made in this file and not in the projects side validating, etc.
Another thing, this function will default if the switch case does not found the string.
Also thought about sending two request at the same time but that's just bad programming.
Also though of fallback to another request with the other naming, but since the switch case will still default if it's not in the options, it will not throw an error to actually do the callback for the next function.
What do you guys think is the right approach for something simple and yet capable of breaking a lot of things.
Thanks in advance.
javascript string
|
show 2 more comments
A little bit of backstory:
We're trying to address a bug on a local library we have.
I was trying to convince the senior developers of changing naming convention when using word like these:
enable disable hide unhide
because they were using
enable disable hide undelete
We discussed the fact of this being a breaking change and will stop other products from working.
So it was disscused to add the unhide without taking the undelete out so that it does not break anything and in the process, if the user uses either unhide or undelete they should still do the same in theory.
Here comes the programming problem now:
This is my function:
toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false)
How can I continue to pass a string (without converting to an array or object) but also start passing 2 values so that the changes have to be made in this file and not in the projects side validating, etc.
Another thing, this function will default if the switch case does not found the string.
Also thought about sending two request at the same time but that's just bad programming.
Also though of fallback to another request with the other naming, but since the switch case will still default if it's not in the options, it will not throw an error to actually do the callback for the next function.
What do you guys think is the right approach for something simple and yet capable of breaking a lot of things.
Thanks in advance.
javascript string
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as eitherunhide
orundelete
?
– theapologist
Nov 15 '18 at 16:38
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
Yeah that's pretty crazy. Just a question, why don't you useundelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can useunhide
in your code and change it toundelete
only when you have to make the function call?
– theapologist
Nov 15 '18 at 16:42
|
show 2 more comments
A little bit of backstory:
We're trying to address a bug on a local library we have.
I was trying to convince the senior developers of changing naming convention when using word like these:
enable disable hide unhide
because they were using
enable disable hide undelete
We discussed the fact of this being a breaking change and will stop other products from working.
So it was disscused to add the unhide without taking the undelete out so that it does not break anything and in the process, if the user uses either unhide or undelete they should still do the same in theory.
Here comes the programming problem now:
This is my function:
toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false)
How can I continue to pass a string (without converting to an array or object) but also start passing 2 values so that the changes have to be made in this file and not in the projects side validating, etc.
Another thing, this function will default if the switch case does not found the string.
Also thought about sending two request at the same time but that's just bad programming.
Also though of fallback to another request with the other naming, but since the switch case will still default if it's not in the options, it will not throw an error to actually do the callback for the next function.
What do you guys think is the right approach for something simple and yet capable of breaking a lot of things.
Thanks in advance.
javascript string
A little bit of backstory:
We're trying to address a bug on a local library we have.
I was trying to convince the senior developers of changing naming convention when using word like these:
enable disable hide unhide
because they were using
enable disable hide undelete
We discussed the fact of this being a breaking change and will stop other products from working.
So it was disscused to add the unhide without taking the undelete out so that it does not break anything and in the process, if the user uses either unhide or undelete they should still do the same in theory.
Here comes the programming problem now:
This is my function:
toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false)
How can I continue to pass a string (without converting to an array or object) but also start passing 2 values so that the changes have to be made in this file and not in the projects side validating, etc.
Another thing, this function will default if the switch case does not found the string.
Also thought about sending two request at the same time but that's just bad programming.
Also though of fallback to another request with the other naming, but since the switch case will still default if it's not in the options, it will not throw an error to actually do the callback for the next function.
What do you guys think is the right approach for something simple and yet capable of breaking a lot of things.
Thanks in advance.
javascript string
javascript string
asked Nov 15 '18 at 16:23
christopher de jesuschristopher de jesus
1228
1228
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as eitherunhide
orundelete
?
– theapologist
Nov 15 '18 at 16:38
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
Yeah that's pretty crazy. Just a question, why don't you useundelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can useunhide
in your code and change it toundelete
only when you have to make the function call?
– theapologist
Nov 15 '18 at 16:42
|
show 2 more comments
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as eitherunhide
orundelete
?
– theapologist
Nov 15 '18 at 16:38
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
Yeah that's pretty crazy. Just a question, why don't you useundelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can useunhide
in your code and change it toundelete
only when you have to make the function call?
– theapologist
Nov 15 '18 at 16:42
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as either
unhide
or undelete
?– theapologist
Nov 15 '18 at 16:38
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as either
unhide
or undelete
?– theapologist
Nov 15 '18 at 16:38
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
Yeah that's pretty crazy. Just a question, why don't you use
undelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can use unhide
in your code and change it to undelete
only when you have to make the function call?– theapologist
Nov 15 '18 at 16:42
Yeah that's pretty crazy. Just a question, why don't you use
undelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can use unhide
in your code and change it to undelete
only when you have to make the function call?– theapologist
Nov 15 '18 at 16:42
|
show 2 more comments
1 Answer
1
active
oldest
votes
Kinda opinion based, but it's the wrong approach imho.
I would change the word undelete to unhide only on the rendered websites and keep the internal API the same way until the senior devs can fix the breaking changes.
So the user would see the word 'unhide' on their screen, but the API will still stay 'undelete'.
In more complex applications, you'd use an enumeration list so you can change the labels as many times as you want:
const enum_options = [
'enable',
'disable',
'hide',
'show'
];
// 3 is the index of the word 'show'
toggleAction(data._id, 3, (err, data) => { // cool stuff }, false)
That way the API never has to change when you change the labels to any word you desire. Which will also help alot if you ever have to support multiple languages.
ps:
1) if this is a breaking change, there's an issue with the architecture used.
Fix the issues instead of adding even more fragile code. Switching to like using a string 'undelete-unhide' will still need alot of api changes if the entire app has the word 'undelete' written everywhere at the moment.
2) The opposite of hide is usually 'show', not unhide.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53323783%2fkeep-sending-a-string-without-breaking-changes-on-this-npm-library%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Kinda opinion based, but it's the wrong approach imho.
I would change the word undelete to unhide only on the rendered websites and keep the internal API the same way until the senior devs can fix the breaking changes.
So the user would see the word 'unhide' on their screen, but the API will still stay 'undelete'.
In more complex applications, you'd use an enumeration list so you can change the labels as many times as you want:
const enum_options = [
'enable',
'disable',
'hide',
'show'
];
// 3 is the index of the word 'show'
toggleAction(data._id, 3, (err, data) => { // cool stuff }, false)
That way the API never has to change when you change the labels to any word you desire. Which will also help alot if you ever have to support multiple languages.
ps:
1) if this is a breaking change, there's an issue with the architecture used.
Fix the issues instead of adding even more fragile code. Switching to like using a string 'undelete-unhide' will still need alot of api changes if the entire app has the word 'undelete' written everywhere at the moment.
2) The opposite of hide is usually 'show', not unhide.
add a comment |
Kinda opinion based, but it's the wrong approach imho.
I would change the word undelete to unhide only on the rendered websites and keep the internal API the same way until the senior devs can fix the breaking changes.
So the user would see the word 'unhide' on their screen, but the API will still stay 'undelete'.
In more complex applications, you'd use an enumeration list so you can change the labels as many times as you want:
const enum_options = [
'enable',
'disable',
'hide',
'show'
];
// 3 is the index of the word 'show'
toggleAction(data._id, 3, (err, data) => { // cool stuff }, false)
That way the API never has to change when you change the labels to any word you desire. Which will also help alot if you ever have to support multiple languages.
ps:
1) if this is a breaking change, there's an issue with the architecture used.
Fix the issues instead of adding even more fragile code. Switching to like using a string 'undelete-unhide' will still need alot of api changes if the entire app has the word 'undelete' written everywhere at the moment.
2) The opposite of hide is usually 'show', not unhide.
add a comment |
Kinda opinion based, but it's the wrong approach imho.
I would change the word undelete to unhide only on the rendered websites and keep the internal API the same way until the senior devs can fix the breaking changes.
So the user would see the word 'unhide' on their screen, but the API will still stay 'undelete'.
In more complex applications, you'd use an enumeration list so you can change the labels as many times as you want:
const enum_options = [
'enable',
'disable',
'hide',
'show'
];
// 3 is the index of the word 'show'
toggleAction(data._id, 3, (err, data) => { // cool stuff }, false)
That way the API never has to change when you change the labels to any word you desire. Which will also help alot if you ever have to support multiple languages.
ps:
1) if this is a breaking change, there's an issue with the architecture used.
Fix the issues instead of adding even more fragile code. Switching to like using a string 'undelete-unhide' will still need alot of api changes if the entire app has the word 'undelete' written everywhere at the moment.
2) The opposite of hide is usually 'show', not unhide.
Kinda opinion based, but it's the wrong approach imho.
I would change the word undelete to unhide only on the rendered websites and keep the internal API the same way until the senior devs can fix the breaking changes.
So the user would see the word 'unhide' on their screen, but the API will still stay 'undelete'.
In more complex applications, you'd use an enumeration list so you can change the labels as many times as you want:
const enum_options = [
'enable',
'disable',
'hide',
'show'
];
// 3 is the index of the word 'show'
toggleAction(data._id, 3, (err, data) => { // cool stuff }, false)
That way the API never has to change when you change the labels to any word you desire. Which will also help alot if you ever have to support multiple languages.
ps:
1) if this is a breaking change, there's an issue with the architecture used.
Fix the issues instead of adding even more fragile code. Switching to like using a string 'undelete-unhide' will still need alot of api changes if the entire app has the word 'undelete' written everywhere at the moment.
2) The opposite of hide is usually 'show', not unhide.
answered Nov 15 '18 at 16:35
ShillyShilly
5,7181717
5,7181717
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53323783%2fkeep-sending-a-string-without-breaking-changes-on-this-npm-library%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Hi @christopher, I lost you after you started talking about the function. What exactly is the problem you are facing? I am unable to understand.
– theapologist
Nov 15 '18 at 16:31
simple question: I want to keep passing a string in toggleAction(id, 'theString", etc..) But this string, should have at least 2 values when being read in the applications using it. I can't pass an array or an object, because this will break a lot of things. I would like a clean approach for making: toggleAction(data._id, 'undelete', (err, data) => { // cool stuff }, false) toggleAction(data._id, 'unhide', (err, data) => { // cool stuff }, false) But of course, instead of doing 2 calls make one with the 2 values. It's tricky.. cause i dont see any other way without using object
– christopher de jesus
Nov 15 '18 at 16:35
Just so that I know we are talking about the same thing, you want to pass a string to the function, but the string should have two values? ie; the string should be able to be read as either
unhide
orundelete
?– theapologist
Nov 15 '18 at 16:38
@LloydFrancis exactly. I know it's crazy.
– christopher de jesus
Nov 15 '18 at 16:39
Yeah that's pretty crazy. Just a question, why don't you use
undelete
for the function call in the first place? Assuming that you cannot change anything in the library, perhaps you can useunhide
in your code and change it toundelete
only when you have to make the function call?– theapologist
Nov 15 '18 at 16:42